2015-11-19 88 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獲取字段....