どちらも <binding>
および<portType>
は、操作とそのメッセージを定義しているようです。よくわかりませんが、なぜ両方が必要なのですか?
portType(Javaインターフェイス)へのアナログ)
binding
SOAP Binding:
SOAPバインディングでは、 document
またはrpc
スタイル をencoding
またはliteral
のいずれかで使用できます。 Encodingは、データ値をXML形式でエンコードする方法を示します(これらのルールは、「何か」をXMLにエンコード/シリアル化し、後でデコード/ XMLから「何か」に逆シリアル化されます)。 Literalは、データがスキーマに従ってシリアル化されることを意味します(これは単なるXMLデータです)。輸送タイプがhttp、jms、smtpの場合...
HTTP GET&POST binding:
WSDLには、HTTP 1.1のGETおよびPOST動詞)のバインディングが含まれており、WebブラウザーとWebサイト間の相互作用を記述します。
MIMEバインディング: WSDLには、抽象型を特定のMIME形式の具体的なメッセージにバインドする方法が含まれています。
WSDL 2.0の場合:
便利なリンク
インターフェース(wsdl:portType)
WSDL portType要素は、操作のグループ(インターフェースとも呼ばれる)を定義します。
操作要素には、入力要素と出力要素の組み合わせが含まれます。出力要素がある場合、障害要素が存在する可能性があります。これらの要素の順序は、メッセージ交換パターン(MEP)(一方向、要求-応答など)を定義します
wsdl:binding
WSDLバインディング要素は、特定のプロトコルで特定のportTypeを使用する具体的な詳細を記述します。
PortTypeは、Webサービスのabstract interfaceを定義します。
概念的には、Javaインターフェイスのようなものです。抽象型と関連メソッドを定義するためです。
WSDLでは、ポートタイプは実装済みによって使用されるプロトコル、エンコードスキームなどを示すバインディング要素とサービス要素によってWebサービス実装
つまりバインディングは具体的な実装の詳細を指定し、本質的にportTypeを一連のプロトコル(HTTPおよびSOAP)メッセージスタイル(ドキュメント/ RPC)およびエンコーディング(リテラル)にマッピングします。
ディクションは現在明確ですか?
portType
A 単一のWebサービスは、をサポートできます異なるプロトコルの数。データの構造は、Webサービスの呼び出しに使用するプロトコルによって異なります。このため、操作からアクセスできるendpointsにマッピングする方法が必要です。 portType要素がこのマッピングを処理します。
このWebサービスで使用可能な各プロトコルのportType定義を配置できます。たとえば、SOAP、HTTP-POST、およびHTTP-GETを使用するための個別のportType定義を使用できます。操作名は、Webサービスから利用可能なメソッドです。
binding
操作を取得できるポートにエンドユーザーがバインドする方法を定義できます。これを行うには、要素を使用します。
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>