【发布时间】:2014-01-17 10:47:07
【问题描述】:
使用 C# 从客户端将对象传递到 WCF 服务时遇到问题。该对象包含日期时间属性。当我传递属性时,日期时间属性出现错误。当我发送除日期时间属性以外的属性时,它工作正常。请指导我解决这个问题。
值对象:
[DataContract]
public class TestVO
{
[DataMember]
public long TEST_ID { get; set; }
[DataMember]
public string TEST_NO { get; set; }
[DataMember]
public DateTime TEST_DATE { get; set; }
[DataMember]
public long CREATED_BY { get; set; }
[DataMember]
public DateTime CREATED_ON { get; set; }
[DataMember]
public long UPDATED_BY { get; set; }
[DataMember]
public DateTime? UPDATED_ON { get; set; }
}
数据传输对象
[DataContract]
public class Test
{
[DataMember]
public TestVO objTest { get; set; }
}
WCF 方法:
public void GetTest(Test objTest, string strTest1)
{
dynamic response;
}
WCF服务方式:
[OperationContract]
[WebInvoke(
Method = "POST", UriTemplate = "GetTest/", BodyStyle = WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
void GetTest(Test objTest, string strTest1)
客户端:
try
{
Uri address = new Uri("http://localhost:91/MPOSService.svc/web/GetTest/");
// Create the web request
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
// Set type to POST
request.Method = "POST";
request.ContentType = "application/json";
Test objTest = new Test();
TestVO objTestVO = new TestVO();
objTestVO.TEST_ID = 1;
objTestVO.TEST_NO="TT001";
objTestVO.TEST_DATE = DateTime.Now;
objTestVO.CREATED_BY = 1;
objTestVO.CREATED_ON = DateTime.Now;
objTest.Test=objTestVO;
JObject jsonNew = new JObject();
jsonNew.Add("objTest", JToken.FromObject(objTest));
jsonNew.Add("strTest1", JToken.FromObject("1"));
string data2 = jsonNew.ToString();
// Create a byte array of the data we want to send
byte[] byteData = UTF8Encoding.UTF8.GetBytes(data2);
// Set the content length in the request headers
request.ContentLength = byteData.Length;
// Write data
using (Stream postStream = request.GetRequestStream())
{
postStream.Write(byteData, 0, byteData.Length);
}
// Get response
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
// Get the response stream
StreamReader reader = new StreamReader(response.GetResponseStream());
var statusCode = response.StatusCode;
}
}
catch
{
}
错误: *远程服务器返回错误:(400) Bad Request。*
【问题讨论】:
-
我认为你可能需要用
[Serializable]装饰你的Test/TestVO类。 MSDN reference(对不起,我没有完全的权限来测试这个。)
标签: c# asp.net .net wcf web-services