0

我必须连接到旧版 Web 服务。

在 Visual Studio 中,如果我执行添加服务引用,则在服务器上输入 WSDL 文件的 url。我的服务出现了,我针对它编写了代码。但是当我运行代码时,我得到了这个错误:

System.ServiceModel.CommunicationException:传入消息的信封版本 (Soap12 ( http://www.w3.org/2003/05/soap-envelope )) 与编码器 (Soap11 ( http://schemas ) 的信封版本不匹配.xmlsoap.org/soap/envelope/ ))。确保使用与预期消息相同的版本配置绑定。

我的 app.config 看起来像这样:

  <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="LoginServiceSoap" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://server/Service.asmx" binding="basicHttpBinding"
                bindingConfiguration="LoginServiceSoap" contract="Stuff.Login.LoginServiceSoap"
                name="LoginServiceSoap" />
        </client>
    </system.serviceModel>

但是,如果我添加“Web 参考”,我可以与服务正常通信。但我的理解是我现在应该使用服务引用,而不是 WebReferences。我假设我的上述配置有问题。

还是因为我要连接的服务类型,我是否被迫使用 Web 参考?

4

1 回答 1

1

希莫斯,

您可以(理论上)将版本号添加到绑定定义中。

envelopeVersion="None/Soap11/Soap12"

当然,为您的服务提供正确的价值。

所以它看起来更像:

<basicHttpBinding>
    <binding name="LoginServiceSoap"
             envelopeVersion="Soap12" />
</basicHttpBinding>

希望这可以帮助您按照自己的方式做事。

于 2014-10-29T18:31:39.763 回答