我們得到了,我們有我們的項目要消耗外部SOAP服務。所有這些都提供了WSDL數據,但其中很多不是.NET服務(大部分都是用Java編寫的)。我們使用wsdl.exe工具生成了許多客戶端代理。這個工具做它應該做的事情,它創建代理我們消費。強制ASMX代理使用XmlSerializer的,而不是DataContractSerializer的
的問題出現,一旦我們嘗試調用使用生成的代理這些服務的方法。爲了記錄目的,我們攔截所有SOAP請求,並且XML數據看起來與WSDL模式中指定的不同。
例如,如果一個字段被稱爲「名」,我們的代理會序列爲「名稱字段」。我想這是因爲名爲「Name」的屬性使用了一個名爲「nameField」的支持字段。另一方面的服務顯然不能解釋這種命名約定。
如果我們的ASMX代理使用舊的XmlSerializer,但由於某些原因,他們會選擇DataContractSerializer,這會完全混淆序列化並破壞客戶端與服務之間的兼容性,所以不會發生這種情況。
我的同事們都使出手動構造XML數據,然後用HttpWebRequest類發送。我認爲這在2011年是完全不可接受的,這是自動代理生成的目的。
我的問題是:爲什麼會這樣?爲什麼我們的代理使用DataContractSerializer並因此忽略了進程中的所有xml序列化屬性?有沒有辦法強制他們再次使用XmlSerializer?
我們使用.NET 4.0。
所以你使用此ASMX作爲服務引用或Web引用?因爲.net對待它們非常不同。 – Darren
作爲網頁參考。必須是關於配置的東西,因爲當我嘗試在一個乾淨的解決方案中複製問題時 - 一切正常。無所謂,我們現在正在使用解決方法。 – Vex