XML WSDL
- WSDL расшифровывается как язык описания веб-служб.
- WSDL используется для описания веб-сервисов.
- WSDL написан на XML
- WSDL — это рекомендация W3C от 26 июня 2007 г.
WSDL-документы
Документ WSDL описывает веб-службу. Он определяет местоположение службы и методы службы, используя следующие основные элементы:
Element | Description |
---|---|
<types> | Defines the (XML Schema) data types used by the web service |
<message> | Defines the data elements for each operation |
<portType> | Describes the operations that can be performed and the messages involved. |
<binding> | Defines the protocol and data format for each port type |
Основная структура документа WSDL выглядит следующим образом:
<definitions>
<types>
data type definitions........
</types>
<message>
definition of the data being communicated....
</message>
<portType>
set of operations......
</portType>
<binding>
protocol and data format specification....
</binding>
</definitions>
Пример WSDL
Это упрощенная часть документа WSDL:
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
В этом примере элемент <portType> определяет «glossaryTerms» как имя порта и «getTerm» как имя операции .
Операция «getTerm» имеет входное сообщение с именем «getTermRequest» и выходное сообщение с именем «getTermResponse».
Элементы <message> определяют части каждого сообщения и связанные типы данных.
Элемент <portType>
Элемент <portType> определяет веб-службу , операции , которые можно выполнять, и задействованные сообщения .
Тип запроса-ответа является наиболее распространенным типом операции, но WSDL определяет четыре типа:
Type | Definition |
---|---|
One-way | The operation can receive a message but will not return a response |
Request-response | The operation can receive a request and will return a response |
Solicit-response | The operation can send a request and will wait for a response |
Notification | The operation can send a message but will not wait for a response |
Односторонняя операция WSDL
Пример односторонней операции:
<message name="newTermValues">
<part name="term" type="xs:string"/>
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="setTerm">
<input name="newTerm" message="newTermValues"/>
</operation>
</portType >
В приведенном выше примере тип порта «glossaryTerms» определяет одностороннюю операцию, называемую «setTerm».
Операция "setTerm" позволяет вводить новые сообщения терминов глоссария, используя сообщение "newTermValues" с входными параметрами "term" и "value". Однако для операции не определен выход.
Операция запроса-ответа WSDL
Пример операции запрос-ответ:
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
В приведенном выше примере тип порта «glossaryTerms» определяет операцию «запрос-ответ» под названием «getTerm».
Операция "getTerm" требует входного сообщения "getTermRequest" с параметром "term" и возвращает выходное сообщение "getTermResponse" с параметром "value".
Привязка WSDL к SOAP
Привязки WSDL определяют формат сообщения и сведения о протоколе для веб-службы.
Пример операции запрос-ответ:
<message name="getTermRequest">
<part name="term" type="xs:string"/>
</message>
<message name="getTermResponse">
<part name="value" type="xs:string"/>
</message>
<portType name="glossaryTerms">
<operation name="getTerm">
<input message="getTermRequest"/>
<output message="getTermResponse"/>
</operation>
</portType>
<binding type="glossaryTerms" name="b1">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<operation>
<soap:operation
soapAction="http://example.com/getTerm"/>
<input><soap:body use="literal"/></input>
<output><soap:body use="literal"/></output>
</operation>
</binding>
Элемент привязки имеет два атрибута — имя и тип.
Атрибут name (вы можете использовать любое имя) определяет имя привязки, а атрибут type указывает на порт для привязки, в данном случае порт "glossaryTerms".
Элемент soap:binding имеет два атрибута — стиль и транспорт.
Атрибут стиля может быть «rpc» или «document». В этом случае мы используем документ. Атрибут транспорта определяет используемый протокол SOAP. В этом случае мы используем HTTP.
Элемент Operation определяет каждую операцию , которую предоставляет portType.
Для каждой операции должно быть определено соответствующее действие SOAP. Вы также должны указать, как кодируются ввод и вывод. В этом случае мы используем «буквальный».