1

我有以下 WCF 协议桥接方案:使用 basicHttp 绑定的 WCF 客户端与使用 netTcp 将请求转发到服务的路由服务通信。

客户端<-> basicHttpBinding (SOAP 1.1)<–>路由器服务 <–> netTcpBinding (SOAP 1.2)<–>服务

路由功能完美运行,直到我们将服务公开给使用 gSOAP 库将消息传递给服务的 C++ 客户端。如果C++客户端直接与Service通信,则调用成功;但是,一旦它尝试通过路由服务进行通信,它就会失败。

服务接收路由消息,但在尝试反序列化消息时立即引发异常。从服务返回的错误消息是一个System.ServiceModel.Dispatcher.NetDispatcherFaultException说法"The formatter threw an exception while trying to deserialize the message…"

该问题似乎是由协议桥接引起的。如果我不使用协议桥接,即我在整个调用链中使用 basicHttp,C++ 客户端(和消息路由)将按预期工作。

我无法弄清楚如何解决这个问题。我了解路由服务被设计为 WCF 到 WCF 中介,但该问题似乎仅与源自 C++ gSOAP 客户端的调用有关。我尝试使用一些 Web 服务测试工具(soapUI、soapSonar)来查看是否可以复制该问题,但它们似乎工作正常。任何帮助或指导将不胜感激。

问候,史蒂夫

4

2 回答 2

2

在联系 Microsoft 并在Yaron Naveh的帮助下,事实证明这是 WCF 路由服务中的一个未经证实的错误。有关问题发生原因的详细信息,Yaron 有一篇不错的博客文章详细描述了该问题。

http://webservices20.blogspot.com/2011/01/gsoap-and-wcf-routing-services-are-not.html

感谢所有帮助澄清这个问题的人!

问候,

史蒂夫

更新(2011 年 4 月 3 日): Microsoft 已针对此问题发布了修复程序。http://connect.microsoft.com/VisualStudio/feedback/details/640260/wcf-routing-services-creates-wrong-message-when-protocol-bridging-is-used

于 2011-02-17T13:48:55.193 回答
0

当使用具有不同传入和传出绑定的任何 RPC 编码的 SOAP 消息时,也会出现此问题。与类型定义关联的命名空间引用在翻译中丢失。我们创建了一个服务行为扩展,手动添加了命名空间引用。这并不理想,但我们无法更改绑定。我们已向 Microsoft 非正式地报告了该问题。

祝你好运

于 2011-03-03T16:15:23.990 回答