web-dev-qa-db-fra.com

Quelle est la différence entre <binding> et <portType> dans WSDL?

<binding> et <portType> semblent définir une opération et son message. Je ne comprends pas très bien, pourquoi sont-ils tous les deux nécessaires?

41
clamp

Interfaces (wsdl: portType)

L'élément WSDL portType définit un groupe d'opérations (parfois appelé interface). 

Les éléments d'opération contiennent une combinaison d'éléments d'entrée et de sortie. Il peut y avoir un élément fautif lorsque vous avez un élément de sortie. L'ordre de ces éléments définit le modèle d'échange de messages (MEP)

enter image description here

wsdl: binding

L'élément de liaison WSDL décrit les détails concrets de l'utilisation d'un type de port particulier avec un protocole donné. 

enter image description here

24
Lijo

portType (interface Analogs to Java)

  • PortType est une partie d'abstraction de WSDL.
  • Un ensemble abstrait d'opérations prises en charge par un ou plusieurs points d'extrémité.

contraignant

  • La reliure est une partie concrète de WSDL.
  • Décrit comment l'appel est appelé en spécifiant des spécifications concrètes de protocole et de format de données pour les opérations et les messages.
  • Les liaisons sont de trois types

    1. SOAP Reliure:
      La liaison SOAP autorise le style document OU rpc avec encoding ou literal. Encoding indique comment une valeur de données doit être codée au format XML (Ces règles spécifient comment "quelque chose" est codé/sérialisé en XML puis décodé/désérialisé ultérieurement de XML en "quelque chose"). Literal signifie que les données sont sérialisées selon un schéma (il s'agit simplement de données XML). Avec le type de transport http, jms, smtp ...

    2. HTTP GET & POST liaison:
      WSDL inclut une liaison pour les verbes GET et POST de HTTP 1.1 afin de décrire l’interaction entre un navigateur Web et un site Web. 

    3. Liaison MIME: WSDL inclut un moyen de lier des types abstraits à des messages concrets au format MIME.


 enter image description here

Dans WSDL 2.0:

  • PortTypes renommés en interfaces
  • Ports renommés en points de terminaison
  • Suppression des constructions de message 

La source


Liens utiles

23
Premraj

PortType définit l'interface abstraite d'un service Web.
Conceptuellement, il s’agit d’une interface Java car il définit un type abstrait et les méthodes associées.
Dans WSDL, le type de port est implémenté par les éléments de liaison et de service qui indiquent les protocoles, schémas de codage, etc. devant être utilisés par un implémentation de service Web
C'est à dire. la liaison spécifie les détails concrets de la mise en oeuvre et mappe essentiellement un type de port à un ensemble de protocoles (HTTP et SOAP), styles de message (Document/RPC) et codages (littéral)
La distinction est-elle claire maintenant?

9
Cratylus

portType
Un seul service Web peut prendre en charge un nombre de protocoles différents. La structure des données dépend du protocole que vous utilisez pour appeler le service Web. Pour cette raison, vous avez besoin d'un moyen de mapper les opérations sur les endpoints à partir desquelles elles peuvent être accessibles. L'élément portType prend en charge ce mappage.

Vous pouvez placer une définition de type de port pour chacun des protocoles disponibles pour ce service Web. Par exemple, vous pouvez avoir des définitions de type de port individuelles pour utiliser SOAP, HTTP-POST et HTTP-GET. Le nom de l'opération est la méthode disponible à partir du service Web. 

contraignant
Vous pouvez définir comment l’utilisateur final se lie à un port sur lequel l’opération peut être obtenue. Vous faites cela en utilisant l'élément. 

4
Shirgill Farhan

wsdl: type_port va avec wsdl: opération i.e. nous sommes dans les domaines des messages et XML en tant que tels

mais wsdl: binding va avec soap: binding et soap: operation C'est-à-dire. nous sommes dans le domaine de l'encodage, des adresses, des en-têtes et des rpc 

par exemple. de: 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/"/>

...

et du paragraphe 3.2, tous les détails possibles sur les éléments de communication de niveau inférieur:

La liaison SOAP étend WSDL aux éléments d'extension suivants:

<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>
0
flyredeagle