web-dev-qa-db-ja.com

WSDLの<binding>と<portType>の違いは何ですか?

どちらも <binding>および<portType>は、操作とそのメッセージを定義しているようです。よくわかりませんが、なぜ両方が必要なのですか?

42
clamp

portType(Javaインターフェイス)へのアナログ)

  • PortTypeは、WSDLの抽象化部分です。
  • 1つ以上のエンドポイントによってサポートされる抽象的な操作のセット。

binding

  • バインディングはWSDLの具体的な部分です。
  • 操作とメッセージの具体的なプロトコルとデータ形式の仕様を指定して、操作がどのように呼び出されるかを説明します。
  • バインディングは3つのタイプ

    1. SOAP Binding:
      SOAPバインディングでは、 documentまたはrpcスタイルencodingまたはliteralのいずれかで使用できます。 Encodingは、データ値をXML形式でエンコードする方法を示します(これらのルールは、「何か」をXMLにエンコード/シリアル化し、後でデコード/ XMLから「何か」に逆シリアル化されます)。 Literalは、データがスキーマに従ってシリアル化されることを意味します(これは単なるXMLデータです)。輸送タイプがhttp、jms、smtpの場合...

    2. HTTP GET&POST binding:
      WSDLには、HTTP 1.1のGETおよびPOST動詞)のバインディングが含まれており、WebブラウザーとWebサイト間の相互作用を記述します。

    3. MIMEバインディング: WSDLには、抽象型を特定のMIME形式の具体的なメッセージにバインドする方法が含まれています。


enter image description here

WSDL 2.0の場合:

  • インターフェイスに名前が変更されたPortType
  • エンドポイントに名前が変更されたポート
  • メッセージ構造を削除

Source


便利なリンク

25
Premraj

インターフェース(wsdl:portType)

WSDL portType要素は、操作のグループ(インターフェースとも呼ばれる)を定義します。

操作要素には、入力要素と出力要素の組み合わせが含まれます。出力要素がある場合、障害要素が存在する可能性があります。これらの要素の順序は、メッセージ交換パターン(MEP)(一方向、要求-応答など)を定義します

enter image description here

wsdl:binding

WSDLバインディング要素は、特定のプロトコルで特定のportTypeを使用する具体的な詳細を記述します。

enter image description here

24
Lijo

PortTypeは、Webサービスのabstract interfaceを定義します。
概念的には、Javaインターフェイスのようなものです。抽象型と関連メソッドを定義するためです。
WSDLでは、ポートタイプは実装済みによって使用されるプロトコル、エンコードスキームなどを示すバインディング要素とサービス要素によってWebサービス実装
つまりバインディングは具体的な実装の詳細を指定し、本質的にportTypeを一連のプロトコル(HTTPおよびSOAP)メッセージスタイル(ドキュメント/ RPC)およびエンコーディング(リテラル)にマッピングします。
ディクションは現在明確ですか?

9
Cratylus

portType
A 単一のWebサービスは、をサポートできます異なるプロトコルの数。データの構造は、Webサービスの呼び出しに使用するプロトコルによって異なります。このため、操作からアクセスできるendpointsにマッピングする方法が必要です。 portType要素がこのマッピングを処理します。

このWebサービスで使用可能な各プロトコルのportType定義を配置できます。たとえば、SOAP、HTTP-POST、およびHTTP-GETを使用するための個別のportType定義を使用できます。操作名は、Webサービスから利用可能なメソッドです。

binding
操作を取得できるポートにエンドユーザーがバインドする方法を定義できます。これを行うには、要素を使用します。

4
Shirgill Farhan

wsdl:portTypeはwsdl:operationとともに使用します。つまり、メッセージとxmlの領域にいます。

ただし、wsdl:bindingはsoap:bindingおよびsoap:operationに対応しています。つまり、エンコード、アドレス、ヘッダー、およびrpcの領域にいます。

例えばfrom: 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>
0
flyredeagle