このトピックでは、Windows Communication Foundation (WCF) が Web サービス記述言語 (WSDL) ドキュメントを ServiceDescription インスタンスとの間でマップする方法について説明します。
ServiceDescription が WSDL 1.1 にマップされる方法
WCF を使用して、サービスの ServiceDescription インスタンスから WSDL ドキュメントをエクスポートできます。 WSDL ドキュメントは、メタデータ エンドポイントを発行するときに、サービスに対して自動的に生成されます。
WsdlImporter
型を使用して、WSDL ドキュメントからServiceEndpointインスタンス、ContractDescription インスタンス、Binding インスタンスをインポートすることもできます。
WCF によってエクスポートされた WSDL ドキュメントは、外部 XML スキーマ ドキュメントから使用されるすべての XML スキーマ定義をインポートします。 サービスでデータ型が使用するターゲット名前空間ごとに、個別の XML スキーマ ドキュメントがエクスポートされます。 同様に、サービス コントラクトが使用するターゲット名前空間ごとに個別の WSDL ドキュメントがエクスポートされます。
サービス内容
ServiceDescription インスタンスは、wsdl:service
要素にマップされます。
ServiceDescription インスタンスには、各インスタンスが個々のwsdl:port
要素にマップされるServiceEndpoint インスタンスのコレクションが含まれています。
特性 | WSDL マッピング |
---|---|
Name |
サービスの wsdl:service /@name値。 |
Namespace |
サービスの wsdl:service 定義の targetNamespace。 |
Endpoints |
サービスの wsdl:port 定義。 |
ServiceEndpoint
ServiceEndpoint インスタンスは、wsdl:port
要素にマップされます。
ServiceEndpoint インスタンスには、アドレス、バインディング、およびコントラクトが含まれます。
IWsdlExportExtension インターフェイスを実装するエンドポイント動作では、アタッチされているエンドポイントのwsdl:port
要素を変更できます。
特性 | WSDL マッピング |
---|---|
Name |
エンドポイントの wsdl:port /@name値と、エンドポイント バインドの wsdl:binding /@name値。 |
Address |
エンドポイントの wsdl:port 定義のアドレス。エンドポイントのトランスポートによって、アドレスの形式が決まります。 たとえば、WCF でサポートされるトランスポートの場合、SOAP アドレスまたはエンドポイント参照を指定できます。 |
Binding |
エンドポイントの wsdl:binding 定義。wsdl:binding 定義とは異なり、WCF のバインドは 1 つのコントラクトに関連付けされません。 |
Contract |
エンドポイントの wsdl:portType 定義。 |
Behaviors |
IWsdlExportExtension インターフェイスを実装するエンドポイント動作では、エンドポイントのwsdl:port を変更できます。 |
バインド
ServiceEndpoint
インスタンスのバインド インスタンスは、wsdl:binding
定義にマップされます。 特定のwsdl:portType
定義に関連付ける必要があるwsdl:binding
定義とは異なり、WCF バインドはコントラクトに依存しません。
バインディングは、バインド要素のコレクションで構成されます。 各要素は、エンドポイントがクライアントと通信する方法の一部の側面を説明します。 さらに、バインディングには、エンドポイントのEnvelopeVersionとAddressingVersionを示すMessageVersionがあります。
特性 | WSDL マッピング |
---|---|
Name |
エンドポイントの既定の名前で使用されます。これは、コントラクト名がアンダースコアで区切られたバインド名です。 |
Namespace |
wsdl:binding 定義のtargetNamespace 。インポート時に、ポリシーが WSDL ポートにアタッチされている場合、インポートされたバインディング名前空間は、 wsdl:port 定義のtargetNamespace にマップされます。 |
BindingElementCollection 、 CreateBindingElements () メソッドによって返される |
wsdl:binding 定義に対するさまざまなドメイン固有の拡張機能 (通常はポリシー アサーション)。 |
MessageVersion |
エンドポイントの EnvelopeVersion と AddressingVersion 。MessageVersion.None が指定されている場合、WSDL バインディングには SOAP バインディングが含まれていません。また、WSDL ポートには WS-Addressing コンテンツが含まれていません。 この設定は通常、プレーンな古い XML (POX) エンドポイントに使用されます。 |
BindingElements
エンドポイント バインドのバインド要素は、ポリシー アサーションなど、 wsdl:binding
内のさまざまな WSDL 拡張機能にマップされます。
バインドの TransportBindingElement によって、SOAP バインディングのトランスポート Uniform Resource Identifier (URI) が決まります。
AddressingVersion
バインドの AddressingVersion
は、 wsd:port
で使用されるアドレス指定のバージョンにマップされます。 WCF では、SOAP 1.1 および SOAP 1.2 アドレスがサポートされ、2004 年 8 月 8 日と WS-Addressing 1.0 のエンドポイント参照 WS-Addressing。
EnvelopeVersion
バインドの EnvelopeVersion
は、 wsdl:binding
で使用される SOAP のバージョンにマップされます。 WCF では、SOAP 1.1 と SOAP 1.2 のバインドがサポートされています。
コントラクト
ServiceEndpoint
インスタンスのContractDescription インスタンスは、wsdl:portType
にマップされます。
ContractDescription
インスタンスは、特定のコントラクトのすべての操作を記述します。
特性 | WSDL マッピング |
---|---|
Name |
コントラクトの wsdl:portType /@name値。 |
Namespace |
wsdl:portType 定義の targetNamespace。 |
SessionMode |
コントラクトの wsdl:portType /@msc:usingSession 値。 この属性は、WSDL 1.1 の WCF 拡張機能です。 |
Operations |
コントラクトの wsdl:operation 定義。 |
オペレーション
OperationDescription インスタンスは、wsdl:portType
/wsdl:operation
にマップされます。
OperationDescription
には、操作のメッセージを記述するMessageDescription
インスタンスのコレクションが含まれています。
WSDL ドキュメントに OperationDescription
をマップする方法には、 DataContractSerializerOperationBehavior
と XmlSerializerOperationBehavior
という 2 つの操作動作が大きく関与します。
特性 | WSDL マッピング |
---|---|
Name |
操作の wsdl:portType /wsdl:operation /@name値。 |
ProtectionLevel |
この操作の wsdl:binding/wsdl:operation メッセージにアタッチされているセキュリティ ポリシーの保護アサーション。 |
IsInitiating |
操作の wsdl:portType /wsdl:operation /@msc:isInitiating 値。 この属性は、WSDL 1.1 の WCF 拡張機能です。 |
IsTerminating |
操作の wsdl:portType /wsdl:operation /@msc:isTerminating 値。 この属性は、WSDL 1.1 の WCF 拡張機能です。 |
Messages |
操作の wsdl:portType /wsdl:operation /wsdl:input メッセージと wsdl:portType /wsdl:operation /wsdl:output メッセージ。 |
Faults |
操作の wsdl:portType /wsdl:operation /wsdl:fault 定義。 |
Behaviors |
DataContractSerializerOperationBehavior とXmlSerializerOperationBehavior は、操作のバインドと操作メッセージを処理します。 |
The DataContractSerializerOperationBehavior
操作の DataContractSerializerOperationBehavior
は、その操作の WSDL メッセージとバインディングをエクスポートする IWsdlExportExtension
実装です。 XML スキーマ型は、 XsdDataContractExporter
を使用してエクスポートされます。
DataContractSerializerOperationBehavior
は、その操作に使用する使用、スタイル、スキーマ エクスポーターとインポーターも決定します。
特性 | WSDL マッピング |
---|---|
DataContractFormatAttribute |
この属性の Style プロパティは、操作の wsdl:binding /wsdl:operation /soap:operation /@style値にマップされます。DataContractSerializerOperationBehavior では、WSDL でのスキーマ型のリテラル使用のみがサポートされます。 |
The XmlSerializerOperationBehavior
操作の XmlSerializerOperationBehavior
は、その操作の WSDL メッセージとバインディングをエクスポートする IWsdlExportExtension
実装です。 XML スキーマ型は、 XmlSchemaExporter
を使用してエクスポートされます。
XmlSerializerOperationBehavior
は、その操作に使用する使用、スタイル、スキーマ エクスポーターとインポーターも決定します。
特性 | WSDL マッピング |
---|---|
XmlSerializerFormatAttribute |
この属性の Style プロパティは、操作の wsdl:binding /wsdl:operation /soap:operation /@style値にマップされます。この属性の Use プロパティは、操作内のすべてのメッセージの wsdl:binding /wsdl:operation /soap:operation /*/@use値にマップされます。 |
メッセージ
MessageDescription
インスタンスは、操作のwsdl:portType
/wsdl:operation
/wsdl:input
またはwsdl:portType
/wsdl:operation
/wsdl:output
メッセージによって参照されるwsdl:message
にマップされます。
MessageDescription
には本文とヘッダーがあります。
特性 | WSDL マッピング |
---|---|
Action |
メッセージの SOAP または WS-Addressing アクション。 アクション文字列 "*" を使用する操作は WSDL では表されないことに注意してください。 |
Direction |
MessageDirection.Input
wsdl:input にマップされます。MessageDirection.Output
wsdl:output にマップされます。 |
ProtectionLevel |
このメッセージの wsdl:message 定義にアタッチされているセキュリティ ポリシーの保護アサーション。 |
Body |
メッセージのメッセージ本文。 |
Headers |
メッセージのヘッダー。 |
ContractDescription.Name 、OperationContract.Name |
エクスポート時に、 wsdl:message /@name値の派生に使用されます。 |
メッセージ本文
MessageBodyDescription
インスタンスは、メッセージの本文のwsdl:message
/wsdl:part
定義にマップされます。 メッセージ本文は、ラップまたはベアにすることができます。
特性 | WSDL マッピング |
---|---|
WrapperName |
スタイルが RPC でない場合、WrapperName は、@nameが "parameters" に設定されたwsdl:message /wsdl:part によって参照される要素名にマップされます。 |
WrapperNamespace |
スタイルが RPC でない場合、 WrapperNamespace は wsdl:message /wsdl:part の要素名前空間にマップされ、 @name は "parameters" に設定されます。 |
Parts |
このメッセージ本文のメッセージ部分。 |
ReturnValue |
ラッパー要素が存在する場合のラッパー要素の子要素 (ドキュメント ラップ スタイルまたは RPC スタイル)、それ以外の場合はメッセージの最初の wsdl:message /wsdl:part 。 |
メッセージ パーツ
MessagePartDescription
インスタンスは、メッセージ パーツが指す xml スキーマの種類または要素をwsdl:message
/wsdl:part
にマップします。
特性 | WSDL マッピング |
---|---|
Name |
メッセージ パーツの wsd:message /wsdl:part /@name値と、メッセージ パーツが指す要素の名前。 |
Namespace |
メッセージ パーツが指す要素の名前空間。 |
Index |
メッセージの wsdl:message /wsdl:part のインデックス。 |
ProtectionLevel |
このメッセージ 部分の wsdl:message 定義にアタッチされているセキュリティ ポリシーの保護アサーション。 ポリシーは、特定のメッセージ部分を指すパラメーター化されます。 |
MessageType |
メッセージ パーツが指す要素の XML スキーマ型。 |
メッセージ ヘッダー
MessageHeaderDescription
インスタンスは、メッセージ パーツのsoap:header
バインディングにもマップされるメッセージ パーツです。
障害
FaultDescription
インスタンスは、wsdl:portType
/wsdl:operation
/wsdl:fault
定義とそれに関連付けられているwsdl:message
定義にマップされます。
wsdl:message
は、関連付けられている WSDL ポートの種類と同じターゲット名前空間に追加されます。
wsdl:message
には、FaultDescription
インスタンスのDefaultType
プロパティ値に対応する XML スキーマ要素を指す "detail" という名前のメッセージ 部分が 1 つ含まれています。
特性 | WSDL マッピング |
---|---|
Name |
エラーの wsdl:portType /wsdl:operation /wsdl:fault /@name値。 |
Namespace |
エラー詳細メッセージ パーツが指す XML スキーマ要素の名前空間。 |
Action |
エラーの SOAP または WS-Addressing アクション。 |
ProtectionLevel |
このエラーの wsdl:message 定義にアタッチされているセキュリティ ポリシーの保護アサーション。 |
DetailType |
詳細メッセージ パーツが指す要素の XML スキーマ型。 |
Name, ContractDescription.Name, OperationDescription.Name, |
エラー メッセージの wsdl:message /@name値を取得するために使用します。 |