2013-01-03 15 views
2

我正在使用提供的WSDL文件爲第三方SOAP服務編寫客戶端。使用WCF執行此操作的默認方法是使用svcutil生成本地代理類,並讓WCF自動將對服務調用的回覆反序列化爲代理對象。使用WCF消費SOAP:以原始XML格式接收回復主體

但是 - 由於我已經建立了可以很好地處理XML和XPath的代碼,所以我並沒有在使用代理對象時使用代碼對象,而只是接受原始形式的實體,序列化它們。另一方面,我不希望自己編寫SOAP請求的麻煩,並希望WCF繼續處理它。

我知道,SvcUtil工具的/ importXmlTypes標誌將幾乎讓我有隻在他們的XmlNode數組頂級回覆對象,但最佳我想

XmlDocument SomeServiceMethod(...) 

是這樣的可能嗎?

+0

您是否嘗試過使用'XmlElement'(而不是'XmlDocument')?這應該工作。 'XElement'應該也可以。 – carlosfigueira

+0

使用XmlElement只捕獲正文中的第一個元素。足夠奇怪地使用XmlElement []沒有捕獲任何東西,並且最終使用XmlNode [](如WCF錯誤消息所建議的那樣)並且足夠好。謝謝! – AgentFransis

回答

0

那麼,你可以做到這一點,但它不是很好。您可以創建一個消息檢查器並將其附加到您的代理(使用IClientMessageInspector)。樣品:here。 因此,您可以以裸露形式攔截回覆,但反饋到達代理時仍會發生反序列化。

然而,想想這將如何工作。你有你的代理已經可以完成這項工作,但是你只能在這個上工作,只有用於你手動解析的答覆(答覆)。

另外,想想服務更新/更改時會發生什麼。您必須更改解析代碼,而不是僅更新代理,然後使用更新的合約。

無論如何,here's關於自定義WCF行爲的一些額外閱讀。

+0

是的,我知道檢查員,正如你所說我想避免不必要的反序列化(反正它有點難看)。 如果通過完成這項工作,您的意思是讓我能夠方便地訪問我所獲得的數據,然後就可以完成這項工作。但最終我的工作是將這些數據映射並存儲到我的系統中。對於映射位,我得到了一個由XPath定義的完整規範,並且可以用方便的格式提供。爲此,我們有可以自動執行大量工作的工具,這些工具基於使用xml和XPath。 此外,答覆都是重要的,請求是簡單的數據請求。 – AgentFransis