部分参数值未使用HTTP Post传递

时间:2010-01-14 21:17:41

标签: c# wcf web-services http post

我是HTTP Post新手并遇到一个奇怪的问题。我有一个请求对象定义如下:

[DataContract(Namespace = "http://Test.com/WCF")]
    public class Request
    {
        [DataMember]
        public string CardNumber { get; set; }
        [DataMember]
        public string CardExpDate { get; set; }
        [DataMember]
        public string AccountNumber { get; set; }
        [DataMember]
        public string NameOnCard { get; set; }
        [DataMember]
        public string CardVV2 { get; set; }
        [DataMember]
        public decimal PaidAmount { get; set; }
        [DataMember]
        public decimal ServiceFee { get; set; }
    }

当我执行Http Post Action时,只有部分参数传递给服务。

我的请求标题和正文如下所示:

User-Agent: Fiddler
Host: localhost:8832
Content-Length: 303
Content-Type: application/xml;charset=utf-8

<Request xmlns="http://Test.com/WCF">
<AccountNumber>6136307626</AccountNumber>
<NameOnCard>Test test</NameOnCard>
<CardNumber>4000202020202020</CardNumber>
<CardExpDate>11/11</CardExpDate>
<CardVV2>123</CardVV2>
<PaidAmount>30</PaidAmount>
<ServiceFee>1</ServiceFee>
</Request>

CardNumber,CardExpDate和CardVV2的值始终不适用于该服务。其他领域都很好。

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:4)

DataContract序列化默认假设成员按字母顺序而不是声明顺序序列化,除非您为[DataMember]属性的Order属性指定值以明确控制排序。

看起来你发送的消息与这两种格式都不匹配,所以可能发生的是序列化程序假设某些元素缺失,而乱序的元素是额外的元素,它不知道在哪里加入CLR课程。

因此,要么修复您的请求以使元素按字母顺序排列,要么更改数据提取中的顺序以匹配您的输入消息。