xml序列化导致字段缺失

Meg*_*ark 2 c# xml wcf wsdl web-services

第三方给了我一个 wsdl。这个 wsdl 是使用 MessageContract 定义的(我很遗憾地说,经过多次谷歌搜索后,我仍然不明白从客户端角度使用MessageContractServiceContract时有什么区别)

实例化一个BaseComplex类型的新复杂对象后,该对象由ComplexA[]ComplexB[]数组组成,其中ComplexADecimalDecimal?定义属性后,我然后调用传入BaseComplex类型的服务方法。(不幸的是,由于防火墙的原因,我无法在本地调试服务请求,但是,我已经验证了BaseComplex.ComplexA.Decimal字段在调用服务之前有一个值。)

将代码放置在服务器上后,我的团队就使用 WireShark 来准确查看通过网络传输的数据包中的内容。当我们看到这个时,ComplexA.Decimal字段已被省略......甚至没有空标签。

我能想到的唯一步骤发生在client.SendRequest(BaseComplex)之间调用和 WireShark 输出显示之间的步骤是 .Net 框架的 Xml 序列化。我已经用谷歌搜索了这个问题,但没有找到任何可以给我指明正确方向的东西。

为什么我的客户端无法正确发出请求 xml?

一些注意事项:

  • 我已将给我的 wsdl 拉入 SoapUI,当在服务器上运行它时,我们看到成功的结果。(我在运行代码时在测试中使用相同的值)
  • 我只是这个 wsdl 的消费者/客户端,无法控制 wsdl/服务定义。
  • 我没有真正理解为什么服务是使用 MessageContract不是ServiceContract完成的......(我之前使用 ServiceContract 从未遇到过这个问题)
  • 该问题最有趣的方面之一是 ComplexBase定义Decimal字段,并且该字段正确序列化。也就是说,Request.DecimalProperty会序列化,但Request.ComplexA.DecimalProperty不会序列化。
  • 其他一些注意事项是,这只是 ComplexA 类型中的 Decimal 和可为 null Decimal 字段的问题。ComplexA.DecimalPropertyComplexA.NullableDecimalProperty无法序列化。

非常感谢任何和所有的帮助。如果需要样品,请索取(我没有在这篇文章中包含样品,因为出于安全原因需要对其进行屏蔽)

Meg*_*ark 5

所以,我已经弄清楚了。wsdl 定义的对象具有小数和可为空的小数以及每个定义为 DecimalFieldIsSpecified 的布尔值。由于某些不正当的原因,有必要手动将这些设置为 true 以便 xmlserializer 拾取字段......