2017-03-18 37 views
0

道歉,如果這之前已經問過,但似乎我找不到答案。如何準確找出WCF SOAP XML響應反序列化中的錯誤?

我想使用WCF使用SOAP Web服務。我已經使用Visual Studio 2015的添加服務參考添加服務引用並生成所有代碼。

服務調用失敗,出現以下錯誤的CommunicationException:

System.ServiceModel.CommunicationException : Error in deserializing body of reply message for operation 'XYZ'. 
---- System.InvalidOperationException : There is an error in XML document (2, 979). 
-------- System.FormatException : Input string was not in a correct format. 

我理解的錯誤;據我所知,根據svcutil生成的代碼規定的內容,XML響應文檔中的某些內容(可能爲元素值)無法反序列化。

我正在記錄XML響應文檔。另外,我將它與SoapUI響應進行比較,它們看起來完全相同。

那麼我怎樣才能弄清楚XML文檔中問題的確切位置?有沒有什麼方法,技巧或訣竅可以通過反序列化過程並找出故障位?這是一個相當長的XML文檔...

恕我直言,在這一點上,WCF的行爲就像一個黑盒子,我不能看它裏面。

TIA,

+0

那麼在第2行979位的XML文檔中是什麼? – har07

+0

@ har07下面是響應的第二線由WCF消息檢查使用'AfterReceiveReply'方法記錄: ''...這麼多的(線,位置)座標:( – dpant

回答

0

對於調試,您可以使用Fiddler2輕鬆地捕捉到任何網絡流量,包括SOAP請求/響應的完整的XML(它甚至可以輕鬆處理SSL,不同的Wireshark)

對於伐木...我希望我知道。抱歉。

而且,在C#中欺騙,How to look at the actual SOAP request/response in C#

+0

不,謝謝,不,不,不,我已經可以記錄和查看請求和響應消息。據我所知,響應XML文檔看起來不錯,並且與我在使用SoapUI測試時所得到的完全一樣。但是,XML並未被WCF反序列化。怎樣才能找出它的哪一部分導致問題? – dpant

+0

請將整個響應wsdl文件,所以我們可以幫助你。 – David

0

嗯,似乎一個人不能真正找到正是其中這種反序列化的錯誤所在。如果服務開發人員與服務客戶端開發人員不是同一個人,情況就會變得更糟。

在我的情況下,錯誤是由於服務和生成的客戶端代碼之間的數據類型不匹配造成的。問題的根源在於錯誤的XSD。爲了找到錯誤,我必須聯繫設法找到它的服務開發人員。

一般來說,這是讓你感覺你失去對代碼控制權的事情之一;非常像在項目中的那一點,當你想查看一個庫的源代碼,但你不能,因爲你不擁有它。這是所有決定從事Web服務消費項目的開發人員都應該注意的事情。