【问题标题】:WCF Post method how to pass a objects with datetime propertiesWCF Post方法如何传递具有日期时间属性的对象
【发布时间】: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


【解决方案1】:

如果您还没有,您可能需要考虑启用 WCF 活动跟踪,它应该提供有关服务器端错误的一些其他详细信息。

以下文章很好地概述了 WCF 跟踪:
http://msdn.microsoft.com/en-us/library/ms733025.aspx

【讨论】:

    猜你喜欢
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    相关资源
    最近更新 更多