Подтвердить что ты не робот

Может ли WSDL указать версию SOAP (1.1 или 1.2) веб-службы?

Можно ли увидеть, использует ли веб-служба SOAP 1.1 или 1.2 на основе информации в WSDL?

4b9b3361

Ответ 1

SOAP 1.1 использует пространство имен http://schemas.xmlsoap.org/wsdl/soap/

SOAP 1.2 использует пространство имен http://schemas.xmlsoap.org/wsdl/soap12/

wsdl может определять операции под мылом 1.1 и мылом 1.2 одновременно в том же wsdl. Это полезно, если вам нужно разработать свой wsdl для поддержки новых функций, которые требуют мыла 1.2 (например, MTOM), в этом случае вам не нужно создавать новую услугу, а просто разрабатывать исходную.

Ответ 2

В WSDL, если вы посмотрите раздел Связывание, вы ясно увидите, что привязка мыла явно упоминается, если служба использует мыло 1.2. обратитесь к приведенному ниже образцу.

<binding name="EmployeeServiceImplPortBinding" type="tns:EmployeeServiceImpl">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="findEmployeeById">
    <soap12:operation soapAction=""/>
    <input><soap12:body use="literal"/></input>
    <output><soap12:body use="literal"/></output>
</operation><operation name="create">
    <soap12:operation soapAction=""/>
    <input><soap12:body use="literal"/></input>
    <output><soap12:body use="literal"/></output>
</operation>
</binding>

если веб-служба использует мыло 1.1, оно не будет явно определять какую-либо мыльную версию в файле WSDL в разделе привязки. обратитесь к приведенному ниже образцу.

<binding name="EmployeeServiceImplPortBinding" type="tns:EmployeeServiceImpl">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
<operation name="findEmployeeById">
    <soap:operation soapAction=""/>
    <input><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></input>
    <output><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></output>
</operation><operation name="create">
    <soap:operation soapAction=""/>
    <input><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></input>
    <output><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></output>
</operation>
</binding>

Как определить версию SOAP-сообщения SOAP?

но помните, что это не очень рекомендуемый способ определения версии мыла, которую используют ваши веб-службы. версию сообщения о мыле можно определить одним из следующих способов.

1. проверка пространства имен сообщения с мылом

SOAP 1.1  namespace : http://schemas.xmlsoap.org/soap/envelope

SOAP 1.2 namespace  : http://www.w3.org/2003/05/soap-envelope

2. проверка информации привязки транспорта (информация заголовка http) сообщения о мыле

SOAP 1.1: текст пользователя /xml для типа контекста

   POST /MyService HTTP/1.1
   Content-Type: text/xml; charset="utf-8"
   Content-Length: xxx
   SOAPAction: "urn:uuid:myaction"

SOAP 1.2: пользовательское приложение/мыло + xml для типа контекста

   POST /MyService HTTP/1.1
   Content-Type: application/soap+xml; charset="utf-8"
   Content-Length: xxx
   SOAPAction: "urn:uuid:myaction"

3. используя информацию об ошибке SOAP

Структура сообщения об ошибке SOAP между двумя версиями отличается.

Ответ 4

Да, вы можете видеть, какая версия SOAP поддерживается на основе WSDL.

Взгляните на демонстрационный веб-сервис WSDL. Он имеет ссылку на пространство имен soap12, указывающее, что оно поддерживает SOAP 1.2. Если это отсутствовало, вы, вероятно, были бы в безопасности, если бы служба поддерживала только SOAP 1.1.

Ответ 5

Найден транспортный атрибут в binding-element, который сообщает нам, что это привязка WSDL 1.1 для привязки HTTP SOAP 1.1.

ех.

<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>