WCF 4路由服务 - 协议桥接问题

时间:2010-11-03 10:23:39

标签: wcf routing gsoap

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

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

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

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

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

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

此致 史蒂夫

2 个答案:

答案 0 :(得分:2)

在联系Microsoft并获得Yaron Naveh的帮助后,结果发现这是WCF路由服务中的未经证实的错误。有关问题发生原因的详细信息,Yaron有一篇很好的博客文章,详细描述了这个问题。

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

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

此致

史蒂夫

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

答案 1 :(得分:0)

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

祝你好运