繁体   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