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


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

5 57

5 ответов:

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

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

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

в WSDL, если вы посмотрите на обязательные раздел, вы ясно увидите, что привязка soap явно упоминается, если служба использует soap 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>

если веб-служба использует soap 1.1, она не будет явно определять версию soap в файле 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?

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

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

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

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

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

мыло 1.2 : пользователь application/soap+xml для контекстного типа

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

3. использование информации о неисправностях SOAP

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

Я нашел эту страницу

http://schemas.xmlsoap.org/wsdl/soap12/soap12WSDL.htm

который говорит, что Soap 1.2 использует новое пространство имен http://schemas.xmlsoap.org/wsdl/soap12/

Он находится в'WSDL 1.1 Binding extension for SOAP 1.1'.

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

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

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

ex.

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