Чи може WSDL вказати версію SOAP (1.1 або 1.2) веб-служби?


78

Чи можна побачити, чи використовує веб-служба SOAP 1.1 або 1.2, виходячи з інформації в WSDL?

Відповіді:


71

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), у цьому випадку вам не потрібно створювати нову службу, а просто розвивати оригінальну.


3
MTOM можна використовувати з милом1.1
GregD 04.03.15

40

У 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>

якщо веб-служба використовує soap 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 для Context-Type

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

SOAP 1.2: користувацька програма / мило + xml для Context-Type

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

3. використання інформації про несправності SOAP

Структура повідомлення про помилку SOAP між двома версіями різна.


18
У першій частині вашої відповіді може бути використана додаткова інформація - "soap12" - це префікс простору імен, а не сам простір імен. Потрібно перевірити, до чого підходить префікс "soap12", і яку версію мила вказано. Хтось міг використати soap12 як префікс, але вказувати на URI простору імен soap11.
csadler

Дякую, це було так корисно.
vikingsteve

1
Коментар @csadler надзвичайно важливий, але навіть там правильні значення просторів імен не надаються. Ось ти. soapПрефікс , який відноситься до 1.1 http://schemas.xmlsoap.org/wsdl/soap/. soap12Префікс , який відноситься до 1.2 http://schemas.xmlsoap.org/wsdl/soap12/. Незалежно від імені префікса (може бути парним fooабо bar), просто подивіться, який простір імен він розв’язує.
Wiktor Zychla


4

Так, ви зазвичай можете побачити, яка версія SOAP підтримується на основі WSDL.

Погляньте на демонстраційний веб-сервіс WSDL . У ньому є посилання на простір імен soap12, що означає, що він підтримує SOAP 1.2. Якби цього не було, тоді ви, мабуть, були б у безпеці, припускаючи, що служба підтримує лише SOAP 1.1.


Посилання на простір імен soap12 є хорошим показником. Але якщо він відсутній, це все одно може бути веб-служба SOAP 1.2 - приклад WSDL на en.wikipedia.org/wiki/Web_Services_Description_Language als не має цього посилання, але, можливо, він містить щось інше, що є типовим для SOAP 1.2?
mjn

2

Знайдено атрибут transport в елементі прив'язки, який повідомляє нам, що це прив'язка WSDL 1.1 для прив'язки HTTP SOAP 1.1.

напр.

<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.