В чем разница между <binding>и <portType>в WSDL? - PullRequest
42 голосов
/ 22 декабря 2010

Кажется, что и <binding>, и <portType> определяют операцию и ее сообщение. Я не совсем понимаю, зачем они оба нужны?

Ответы [ 5 ]

25 голосов
/ 12 августа 2015

portType (аналог интерфейса Java)

  • PortType является частью абстракции WSDL.
  • Абстрактный набор операций, поддерживаемых одной или несколькими конечными точками.

1012 * связывание *

  • Связывание - это конкретная часть WSDL.
  • Описывает, как операция вызывается путем указания конкретного протокола и спецификаций формата данных для операций и сообщений.
  • привязки бывают трех типов

    1. Связывание мыла:
      Привязка SOAP допускает document или rpc стиль с encoding или literal. Кодировка указывает, как значение данных должно быть закодировано в формате XML (эти правила определяют, как «что-то» кодируется / сериализуется в XML, а затем декодируется / десериализуется из XML обратно в «что-то»). Литерал означает, что данные сериализуются в соответствии со схемой (это просто обычные данные XML). С типом транспорта http, jms, smtp ...

    2. HTTP GET & POST привязка:
      WSDL включает в себя привязку к глаголам HTTP 1.1 GET и POST, чтобы описать взаимодействие между веб-браузером и веб-сайтом.

    3. MIME переплет: WSDL включает способ привязки абстрактных типов к конкретным сообщениям в некотором формате MIME.


enter image description here

В WSDL 2.0:

  • PortTypes переименован в интерфейсы
  • Порты переименованы в конечные точки
  • Удалены конструкции сообщений

Источник


Полезные ссылки

24 голосов
/ 14 марта 2013

Интерфейсы (wsdl: portType)

Элемент WSDL portType определяет группу операций (иногда называемых интерфейсом).

Операционные элементы содержат комбинацию входных и выходных элементов.Там может быть элемент неисправности, когда у вас есть выходной элемент.Порядок этих элементов определяет шаблон обмена сообщениями (MEP) (односторонний, запрос - ответ и т. Д.)

enter image description here

wsdl: привязка

Элемент привязки WSDL описывает конкретные детали использования определенного portType с данным протоколом.

enter image description here

9 голосов
/ 22 декабря 2010

PortType определяет абстрактный интерфейс веб-службы.
Концептуально он похож на интерфейс Java, поскольку определяет абстрактный тип и связанные с ним методы.
В WSDL тип порта равен реализовано элементами привязки и обслуживания, которые указывают протоколы, схемы кодирования и т. д., которые должны использоваться реализацией веб-службы
Т.е. привязка указывает конкретные подробности реализации ипо существу, сопоставляет portType со стилем сообщений протоколов (HTTP и SOAP) (Document / RPC) и кодировками (литералом)
Распределение теперь ясно?

4 голосов
/ 30 марта 2015

portType
A один веб-сервис может поддерживать количество различных протоколов .Структура данных зависит от протокола, который вы используете для вызова веб-службы.В связи с этим вам необходим способ сопоставления операций с конечными точками , с которых они могут быть доступны.Элемент portType заботится об этом отображении.

Вы можете разместить определение portType для каждого из протоколов, доступных для этой веб-службы.Например, вы можете иметь отдельные определения portType для использования SOAP, HTTP-POST и HTTP-GET .Имя операции - это метод, доступный из веб-службы.

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

0 голосов
/ 16 ноября 2015

wsdl: portType соответствует операции wsdl: то есть мы находимся в сфере сообщений и XML как таковых

но wsdl: binding идет с soap: binding и soap: operation то есть мы находимся в сфере кодирования, адресов, заголовков и rpc

например. от: http://www.w3.org/TR/wsdl#_soap-b

 <binding name="StockQuoteSoap" type="tns:StockQuotePortType">
        <soap:binding style="document" transport="http://example.com/smtp"/>
        <operation name="SubscribeToQuotes">
           <input message="tns:SubscribeToQuotes">
               <soap:body parts="body" use="literal"/>
               <soap:header message="tns:SubscribeToQuotes" part="subscribeheader" use="literal"/>

.....

<binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="GetTradePrice">
       <soap:operation soapAction="http://example.com/GetTradePrice"/>
       <input>
           <soap:body use="encoded" namespace="http://example.com/stockquote"
                      encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>

...

и из пункта 3.2 все возможные подробности о коммуникационных вещах более низкого уровня:

Привязка SOAP расширяет WSDL следующими элементами расширения:

<definitions .... >
    <binding .... >
        <soap:binding style="rpc|document" transport="uri">
        <operation .... >
           <soap:operation soapAction="uri"? style="rpc|document"?>?
           <input>
               <soap:body parts="nmtokens"? use="literal|encoded"
                          encodingStyle="uri-list"? namespace="uri"?>
               <soap:header message="qname" part="nmtoken" use="literal|encoded"
                            encodingStyle="uri-list"? namespace="uri"?>*
                 <soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
                                   encodingStyle="uri-list"? namespace="uri"?/>*
               <soap:header>                                
           </input>
           <output>
               <soap:body parts="nmtokens"? use="literal|encoded"
                          encodingStyle="uri-list"? namespace="uri"?>
               <soap:header message="qname" part="nmtoken" use="literal|encoded"
                            encodingStyle="uri-list"? namespace="uri"?>*
                 <soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
                                   encodingStyle="uri-list"? namespace="uri"?/>*
               <soap:header>                                
           </output>
           <fault>*
               <soap:fault name="nmtoken" use="literal|encoded"
                           encodingStyle="uri-list"? namespace="uri"?>
            </fault>
        </operation>
    </binding>

    <port .... >
        <soap:address location="uri"/> 
    </port>
</definitions>
...