我尝试向服务器发送SOAP1.2请求并收到以下异常
System.ServiceModel.CommunicationException:传入邮件的信封版本(Soap11(http://schemas.xmlsoap.org/soap/envelope/))不 匹配编码器的那个(Soap12(http://www.w3.org/2003/05/soap-envelope))。确保使用与预期消息相同的版本配置绑定。
在通过wireshark分析流量时,我看到响应信封为http://schemas.xmlsoap.org/soap/envelope/,请求信封为http://www.w3.org/2003/05/soap-envelope
我再次尝试使用SOAP 1.1向同一服务器发送消息并获得以下异常
System.ServiceModel.ProtocolException:内容类型application / soap + xml的响应消息与绑定的内容类型不匹配 (text / xml; charset = utf-8)。如果使用自定义编码器,请确保 IsContentTypeSupported方法正确实现。
根据以上2个日志,我可以得出结论远程服务器正在使用SOAP1.1并使用为SOAP1.2定义的内容类型发送响应,即application / soap + xml?它是SOAP规范的正确实现吗?
使用WSDL的服务引用生成代码。以下是代码段:
Test3.ServiceReference1.SoapRqst client = new Test3.ServiceReference1.SoapRqstClient();
RepRequest rqst = new RepRequest();
RepResponse op = client.getReply(rqst);
string responseSting = op.Body.respMsg;
Console.Out.Write(responseSting);
客户端服务模式:
SOAP 1.1的服务绑定
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="<>" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="<>"
binding="basicHttpBinding" bindingConfiguration="<>"
contract="<>" name="<>" />
</client>
</system.serviceModel>
SOAP 1.2的服务绑定
<system.serviceModel>
<bindings>
<customBinding>
<binding name="">
<textMessageEncoding messageVersion="Soap12" />
<httpTransport />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="<>"
binding="customBinding" bindingConfiguration="<>"
contract="<>" name="<>" />
</client>