Веб-справочник работает, но справочник по сервису жалуется на версию Soap

Мне нужно подключиться к устаревшей веб-службе.

В Visual Studio, если я делаю ссылку на добавление службы, введите URL-адрес файла WSDL на сервере. Появляется мой сервис, и я пишу код против него. Но когда я запускаю код, я получаю эту ошибку:

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>

Однако я могу нормально общаться со службой, если добавлю «Веб-ссылку». Но я понимаю, что теперь я должен использовать ссылки на службы вместо WebReferences. Я предполагаю, что у меня что-то не так в приведенной выше конфигурации.

Или я вынужден использовать веб-ссылку из-за типа службы, к которой я подключаюсь?


person sheamus    schedule 13.03.2013    source источник
comment
Убедитесь, что привязка настроена с той же версией, что и ожидаемые сообщения.   -  person John Saunders    schedule 14.03.2013
comment
Джон Сондерс, извините за глупость, но не знаете, как сделать то, о чем просите?   -  person sheamus    schedule 14.03.2013
comment
Закончилось использованием веб-ссылок, пока они работают.   -  person sheamus    schedule 19.03.2013


Ответы (1)


Шеамус,

Вы можете (теоретически) добавить номер версии к определению привязки.

envelopeVersion="None/Soap11/Soap12"

Конечно, с правильной стоимостью ваших услуг.

Так это выглядело бы скорее так:

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

Надеюсь, это поможет вам делать все по-своему.

person Jesse Chisholm    schedule 29.10.2014
comment
У меня точно такая же проблема. Когда я пытаюсь добавить «envelopeVersion = Soap12», я получаю сообщение об ошибке: «атрибут envelopeVersion не разрешен». - person Zag Gol; 11.02.2016