次の方法で共有


ServiceDescription と WSDL リファレンス

このトピックでは、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 バインドはコントラクトに依存しません。

バインディングは、バインド要素のコレクションで構成されます。 各要素は、エンドポイントがクライアントと通信する方法の一部の側面を説明します。 さらに、バインディングには、エンドポイントのEnvelopeVersionAddressingVersionを示すMessageVersionがあります。

特性 WSDL マッピング
Name エンドポイントの既定の名前で使用されます。これは、コントラクト名がアンダースコアで区切られたバインド名です。
Namespace wsdl:binding定義のtargetNamespace

インポート時に、ポリシーが WSDL ポートにアタッチされている場合、インポートされたバインディング名前空間は、wsdl:port定義のtargetNamespaceにマップされます。
BindingElementCollectionCreateBindingElements() メソッドによって返される wsdl:binding定義に対するさまざまなドメイン固有の拡張機能 (通常はポリシー アサーション)。
MessageVersion エンドポイントの EnvelopeVersionAddressingVersion

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 をマップする方法には、 DataContractSerializerOperationBehaviorXmlSerializerOperationBehaviorという 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 DataContractSerializerOperationBehaviorXmlSerializerOperationBehaviorは、操作のバインドと操作メッセージを処理します。

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.NameOperationContract.Name エクスポート時に、 wsdl:message/@name値の派生に使用されます。

メッセージ本文

MessageBodyDescription インスタンスは、メッセージの本文のwsdl:message/wsdl:part定義にマップされます。 メッセージ本文は、ラップまたはベアにすることができます。

特性 WSDL マッピング
WrapperName スタイルが RPC でない場合、WrapperNameは、@nameが "parameters" に設定されたwsdl:message/wsdl:partによって参照される要素名にマップされます。
WrapperNamespace スタイルが RPC でない場合、 WrapperNamespacewsdl: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値を取得するために使用します。

こちらも参照ください