WCF MTOM / XOP客户端反序列化错误

这是我已经回答过的SO“问题”之一,但根据b到c的一个星期的谷歌搜索,似乎那里的信息几乎为零。

TL; DR:WCF MTOM编码的BasicHttpBinding客户端连接到外部/第3部分,MTOP响应的XOP处理上的非.NET Web服务阻塞-基本上,MTOM编码器似乎期望二进制元素中的base64有效负载,但会运行到...指令,并且无法将SOAP / XML反序列化为运行时对象,从而在该问题的标题中引发错误。

错误:应从名称空间“ http://mynamespace”结束元素“ MyBinaryData”。从名称空间“ http://www.w3.org/2004/08/xop/”中找到元素“ xop:Include”

如前所述,关于此主题的讨论并不多,我想b / c MS会根据服务开发来编写他们的大多数WCF文档,而不是太多的客户端(尽管有一些是公平的)

我不打算讲究具体的初始设置b / c,我将要回答我自己的问题,但是我将通过说这更像是默认值来回答这个问题。而不是WCF MTOM的配置。

此外,我知道WCF很老,很无聊,并且不再由MS积极开发,但是它仍然受到支持,并且有很多用途。实际上,我没有太多选择,必须找到一种方法来完成这项工作。这就是为什么我与其他需要解决这种头痛问题的人分享我的发现的原因。

bigege 回答:WCF MTOM / XOP客户端反序列化错误

TL; DR:检查http标头以查看服务响应是否为“传输编码:分块”(流式传输)给您,如果是,请在绑定配置中使用transferMode =“ StreamedResponse”。

因此,在谷歌搜索了几天之后,没有任何帮助,我就启动了Fiddler以进行HTTP流量捕获-这需要您的WCF基本http绑定配置才能代理到Fiddler(我认为默认为http://localhost:8888),具体取决于您的目标服务所处的位置,您可能需要配置Fiddler的网关设置(企业代理等),也可能不需要。

这使我可以看到原始文本在客户端之间往返于他们的服务之间发送;所有负载都很好,在我的情况下,这意味着服务的MTOM / XOP响应已被完全传输,并且WCF运行时未正确解释该响应。我看到的另一件重要的事情是,Transfer-Encoding http标头是“分块的”,并且没有Content-Length标头……这意味着该服务正在流式传输响应,而不是缓冲式响应。现在要注意一点:MS的WCF MTOM文档中有一个标注,要求您始终在绑定配置中使用“ Buffered”作为transferMode……但是没有提及,它实际上仅适用于服务,不一定适用于客户端!

自然地,我只是进入我的配置文件,找到system.serviceModel >>绑定>> basicHttpBinding集合,找到了我特定的绑定配置,并设置了transferMode =“ StreamedResponse”(因为第三方服务正在将我的响应流回给我的客户)。

本文链接:https://www.f2er.com/3062761.html

大家都在问