Конференция "Сети" » Веб-сервис D7->D2010, проблема с версией SOAP [D7]
 
  • Skyle © (02.10.13 12:23) [0]
    Всем привет.

    Есть веб-сервис, написан на D7. К нему подключаются клиенты, написанные на .NET CF версии не более 3.5. Есть тестовое приложение (WinForms), написано в 2008-й студии на FW 3.5.

    После перевода проекта веб-сервиса на D2010 при подключении тестовым приложением получаем сообщение об ошибке

    {"Возможно несоответствие версии SOAP: непредвиденное пространство имен конверта
    http://schemas.xmlsoap.org/wsdl/. Ожидается http://schemas.xmlsoap.org/soap/envelope/."}



    Есть предположение, что в D2010 используется версия SOAP 1.2, в тестовом приложении версия SOAP 1.1.

    Вопрос: можно ли заставить веб-сервис работать в D2010 на версии SOAP 1.1? Кому и что сказать надо?
    В гугле пока находятся ответы на вопрос "как заставить клиентскую часть работать в такой-то версии SOAP", что мне не очень подходит. Но не лишает надежды на то, что и на мой вопрос есть ответ.

    Заранее спасибо.
  • Skyle © (02.10.13 13:08) [1]
    Дополнение.

    Возможно моя гипотеза не подтверждается. Я нашёл кусок кода, который генерирует пространство имён конверта.

    Находится он в модуле InvokeRegistry, например в методе TSOAPHeader.SOAPToObject. Думаю, в остальных местах аналогичный код.

    Ключевой момент
    SoapEnvelopeNamespaces[soSOAP12 in ObjConverter.GetOptions]


    Здесь
    SSoapNamespace = 'http://schemas.xmlsoap.org/soap/envelope/'; { do not localize }
     SSoap12Namespace = 'http://www.w3.org/2003/05/soap-envelope'; { do not localize }
     SOAPEnvelopeNamespaces: array[Boolean] of string = (SSoapNamespace, SSoap12Namespace);



    Моё тестовое приложение ожидало получить пространство имён SSoapNamespace, для этого в опциях не должно быть soSOAP12.
    Диспетчер у меня, ожидаемо, HTTPSoapPascalInvoker, у него в опциях это отключено.

    Что за пространство имён такое у меня возвращается, я вообще не понимаю. Временно кончились версии :(
  • Skyle © (02.10.13 14:21) [2]
    Хм. На самом деле, почему-то при вызове метода веб-сервиса из тестового приложения ему в ответ возвращается WSDL. Вопрос теперь ставится так: почему ему возвращается WSDL?
    Как проверял: просто сохранил в файл содержимое Response.RawContent в методе procedure TMyWebModule.WebModuleAfterDispatch
  • DVM © (02.10.13 16:44) [3]
    Возьми снифер и сравни обмен с веб сервисом на D7 и D2010.
 
Конференция "Сети" » Веб-сервис D7->D2010, проблема с версией SOAP [D7]
Есть новые Нет новых   [134427   +34][b:0][p:0.001]