2015-11-19 63 views
0

我被第三方给了一个wsdl。 这个WSDL使用MessageContract定义(我很抱歉地说,经过多次谷歌搜索我仍然使用MessageContract当VS 的ServiceContract从客户的角度看不懂的区别是什么)xml序列化导致缺少字段

实例化后类型BaseComplex的新复杂的对象,它由阵列的复杂了[]ComplexB [],其中复杂了具有十进制十进制?属性定义,然后我调用服务方法传递BaseComplex类型。 (我很遗憾不能在本地调试服务请求,因为防火墙的,但是,我已经验证BaseComplex.ComplexA.Decimal有值只是使调用服务之前)。

一旦代码被放置在服务器上,我的团队已经使用WireShark来查看穿过网络的数据包中的内容。当我们看这个,ComplexA.Decimal字段已被省略...甚至没有空标签。

我能想到的唯一一步发生在client.SendRequest(BaseComplex)调用和WireShark输出显示的是.NET框架的Xml序列化之间。我从谷歌那里得到了这个问题,但没有遇到任何问题让我指出正确的方向。

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

有两点要注意:

  • 我已经退出给我入了SoapUI WSDL和在服务器上运行这个时候,我们看到成功的结果。 (在运行代码时,我在测试中使用相同的值)
  • 我只是此wsdl的使用者/客户端,无法控制wsdl /服务定义。
  • 我的,为什么服务是使用MessageContract,而不是一个的ServiceContract没有做真正的了解......(我从来没有这个问题的ServiceContract之前)
  • 其中一个最有趣的方面来问题是,ComplexBase已经定义了小数领域,这个领域是系列化正常。也就是说,Request.DecimalProperty序列化,但Request.ComplexA.DecimalProperty没有。
  • 其他一些注意事项是,这只是ComplexA类型中的Decimal和可为空的Decimal字段的问题。 ComplexA.DecimalProperty and ComplexA.NullableDecimalProperty无法序列化。

任何和所有的帮助是非常赞赏。请询问是否需要样品,(我没有在这篇文章中列出,因为它出于安全原因需要掩盖)

回答

0

所以,我已经想通了。 wsdl定义的对象具有小数和可空的小数以及每个定义为DecimalFieldIsSpecified的bool。对于一些不合理的理由,需要手动将这些设置为true,以便xmlserializer获取字段....