簡體   English   中英

WCF(de)序列化在debug / Visual Studio和IIS下的行為不同

[英]WCF (de) serialization behaving differently under debug/Visual Studio and IIS

我有一個托管的WCF服務,其中一種方法的元素類型為xs:AnyType。 在我的代碼中,我將xs:Any序列化為XmlNode

在Visual Studio(iis express)中,我的消息可以完美地傳遞,並且XML加載到XmlNode屬性中。 當我部署到IIS並發送“完全相同的消息”時,該屬性的全部內容都得到一個<。

我之前遇到過一個相關的問題,在Visual Studio中,水合屬性的真實類型是XmlElement,但是在IIS中,它作為XmlText出現(我為什么選擇XmlNode,它是一個共同的祖先)。 具有xs:anytype的WCF消息導致序列化問題

這兩個問題似乎可能是相關的,但是為什么應用程序在Visual Studio中使用的序列化邏輯與IIS中使用的邏輯不同?

刻錄完MSDN支持票證后,我們發現了這兩個問題的根本原因。 IIS與IIS Express沒有關系,消息的內容略有不同。

xsd:anyType允許發送任意XML。 在這種情況下,Java應用程序將發送HtmlEncoded xml作為該元素的有效負載。 WCF不會接受此內容並引發序列化錯誤,而是接受它並將其水化為XmlText而不是XmlElement。 但是,水合后,就沒有完整的有效負載,只有<

使這個問題令人困惑的是,所有調試窗口,WCF跟蹤等都“固定”了htmlEncoded內容以顯示為有效XML。 因此,當我從WCF跟蹤復制消息,並從SoapUI手動運行該消息以嘗試重現時,行為發生了變化!

我正在敦促客戶修復他們發送的消息中的有效負載,但是如果不可能,則可以使用IDispatchMessageInspector.AfterReceiveRequest方法將有效負載轉換為正確的負載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM