【发布时间】:2015-11-19 20:31:57
【问题描述】:
第三方给了我一个 wsdl。 这个 wsdl 是使用 MessageContract 定义的(很抱歉,经过多次谷歌搜索后,我仍然不明白从客户端使用 MessageContract 与 ServiceContract 有什么区别观点)
在实例化一个 BaseComplex 类型的新复杂对象后,该对象由 ComplexA[] 和 ComplexB[] 的数组组成,其中 ComplexA 定义了 Decimal 和 Decimal? 属性,然后我调用传入 BaseComplex 类型的服务方法。 (很遗憾,由于防火墙,我无法在本地调试服务请求,但是,我已验证 BaseComplex.ComplexA.Decimal 字段 HAS A VALUE就在调用服务之前。)
将代码放置在服务器上后,我的团队使用 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 和可为空的 Decimal 字段的问题。 ComplexA.DecimalProperty 和 ComplexA.NullableDecimalProperty 无法序列化。
非常感谢任何和所有帮助。如果需要样品,请索取,(我没有包括在这篇文章中,因为出于安全原因需要对其进行屏蔽)
【问题讨论】:
标签: c# xml web-services wcf wsdl