it-swarm.com.de

Was ist der Unterschied zwischen <binding> und <portType> in WSDL?

Sowohl <binding> als auch <portType> scheinen einen Vorgang und seine Nachricht zu definieren. Ich verstehe nicht ganz, warum sind beide notwendig?

41
clamp

Schnittstellen (wsdl: portType)

Das WSDL-Element portType definiert eine Gruppe von Vorgängen (manchmal als Schnittstelle bezeichnet). 

Die Bedienelemente enthalten eine Kombination aus Eingabe- und Ausgabeelementen. Es kann ein Fehlerelement geben, wenn Sie ein Ausgabeelement haben. Die Reihenfolge dieser Elemente definiert das Nachrichtenaustauschmuster (One-Way, Request - Response usw.).

enter image description here

wsdl: bindend

Das WSDL-Bindungselement beschreibt die konkreten Details der Verwendung eines bestimmten portType mit einem bestimmten Protokoll. 

enter image description here

24
Lijo

portType (Analoge zu Java-Schnittstelle)

  • PortType ist ein Abstraktionsteil von WSDL.
  • Eine abstrakte Gruppe von Vorgängen, die von einem oder mehreren Endpunkten unterstützt wird.

Bindung

  • Die Bindung ist ein konkreter Teil von WSDL.
  • Beschreibt, wie die Operation aufgerufen wird, indem konkrete Protokoll- und Datenformatspezifikationen für die Operationen und Nachrichten angegeben werden.
  • Bindungen sind drei Arten

    1. SOAP Bindung:
      Die SOAP-Bindung ermöglicht entweder document oder rpc style mit entweder encoding oder literal. Encoding gibt an, wie ein Datenwert in einem XML-Format codiert werden soll (Diese Regeln legen fest, wie "etwas" in XML codiert/serialisiert und später von XML zurück in "etwas" decodiert/deserialisiert wird). Literal bedeutet, dass die Daten nach einem Schema serialisiert werden (dies sind nur einfache XML-Daten). Mit der Transportart http, jms, smtp ...

    2. HTTP GET & POST Bindung:
      WSDL enthält eine Bindung für die Verben von HTTP 1.1 für GET und POST, um die Interaktion zwischen einem Webbrowser und einer Website zu beschreiben. 

    3. MIME-Bindung: WSDL bietet eine Möglichkeit, abstrakte Typen in einem MIME-Format an konkrete Nachrichten zu binden.


 enter image description here

In WSDL 2.0:

  • PortTypes in Schnittstellen umbenannt
  • Ports in Endpunkte umbenannt
  • Nachrichtenkonstrukte entfernt 

Quelle


Nützliche Links

23
Premraj

PortType definiert die abstract-Schnittstelle eines Webdienstes.
Konzeptionell ist es wie eine Java-Schnittstelle, da es einen abstrakten Typ und verwandte Methoden definiert.
In WSDL ist der Porttyp implementiert durch die Bindungs- und Serviceelemente, die die Protokolle, Codierungsschemata usw. angeben, die von einer Web-Service-Implementierung verwendet werden.
I.e. Die Bindung gibt konkrete Implementierungsdetails an und ordnet einen portType im Wesentlichen einem Satz von Protokollnachrichten (HTTP und SOAP) (Document/RPC) und Codierungen (Literal) zu.
Ist die Spaltung jetzt klar?

9
Cratylus

portType
Eineinzelner Webservicekann eineAnzahl verschiedener Protokolleunterstützen. Die Struktur der Daten hängt von dem Protokoll ab, mit dem Sie den Webdienst aufrufen. Aus diesem Grund benötigen Sie eine Möglichkeit, die Operationen auf die Endpunkteabzubilden, von denen aus auf sie zugegriffen werden kann. DasportType-Element sorgt für diese Zuordnung.

Sie können für jedes der Protokolle, die Ihnen für diesen Webdienst zur Verfügung stehen, eine portType-Definition angeben. Beispielsweise können Sie für die Verwendung vonSOAP, HTTP-POST und HTTP-GETindividuelle PortType-Definitionen definieren. Der Operationsname ist die im Webdienst verfügbare Methode. 

Bindung
Sie können definieren, wie der Endbenutzer an einen Port bindet, an dem die Operation verfügbar ist. Dazu verwenden Sie das Element. 

4
Shirgill Farhan

wsdl: portType passt zu wsdl: operation Wir befinden uns im Bereich von Nachrichten und XML als solchen

aber wsdl: bindung geht mit seife: bindung und seife: operation Wir sind im Bereich der Kodierung, Adressen, Header und RPC 

z.B. von: 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/"/>

...

und ab Abschnitt 3.2 alle möglichen Details zu Kommunikationsmitteln der unteren Ebene:

Die Bindung von SOAP erweitert WSDL um die folgenden Erweiterungselemente:

<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