我在将QCF客户端部署到QA时遇到此错误:
System.ServiceModel.CommunicationException:无法识别的消息版本。
在Fiddler中,我注意到WCF客户端发送的请求包含在SOAP Envelope中(如预期的那样),但远程Web服务的响应不包含在SOAP Envelope中。也就是说,我们的本地调试Web服务发送如下响应:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header />
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Response xmlns="urn:example">
<Success>true</Success>
...
</Response>
</s:Body>
</s:Envelope>
但远程网络服务只是发送:
<?xml version="1.0" encoding="utf-8"?>
<ns0:Response xmlns:ns0="urn:example">
<ns0:Success>true</ns0:Success>
...
</ns0:Response>
据我所知,WCF客户端抛出异常,因为没有SOAP Envelope。所以我的问题是:
WCF客户端正在使用basicHttpBindings(以及基于SSL / TLS的HTTP基本身份验证)。我考虑过使用IClientMessageInspector.AfterReceiveReply()来重写响应,但是在调用该方法之前会抛出异常,即:我们已经为请求/响应日志记录实现了它,并且它没有在那里遇到断点。
更多信息:
在与服务开发人员沟通后,听起来他们完全忽略了我们提供的.wsdl和(svcutil生成的)IService.cs文件,并从头开始编写了一个POX(普通旧XML)服务。
我不相信我们可以说服他们正确地做到这一点,所以现在我正在寻找将正常行为的WCF SOAP客户端转换为POX客户端的技巧。
答案 0 :(得分:0)
这可能是由于您的服务使用Soap1.2而使用其他版本来调用它。
请尝试&#34;添加服务参考&#34; - &#34;高级......&#34; - &#34;添加网络参考...&#34;作为兼容性方法。