ServiceDescription と WSDL 参照

このトピックでは、Windows Communication Foundation (WCF) により、ServiceDescription インスタンスとの間で Web サービス記述言語 (WSDL) ドキュメントがマップされる方法について説明します。

ServiceDescription から WSDL 1.1 へのマッピング

WCF を使用して、サービスの ServiceDescription インスタンスから WSDL ドキュメントをエクスポートできます。 WSDL ドキュメントは、メタデータ エンドポイントを公開したときに自動的にサービスに対して生成されます。

また、ServiceEndpoint 型を使用して、WSDL ドキュメントから ContractDescription インスタンス、Binding インスタンス、および WsdlImporter インスタンスをインポートできます。

WCF によってエクスポートされる WSDL ドキュメントは、使用する XML スキーマ定義を外部の XML スキーマ ドキュメントからインポートします。 データ型がサービスで使用するターゲット名前空間ごとに、個別の XML スキーマ ドキュメントがエクスポートされます。 同様に、サービス コントラクトが使用するターゲット名前空間ごとに、個別の WSDL ドキュメントがエクスポートされます。

ServiceDescription

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 のバインディングは、どのコントラクトにも関連付けられません。
Contract エンドポイントの wsdl:portType 定義
Behaviors IWsdlExportExtension インターフェイスを実装するエンドポイント動作は、エンドポイントの wsdl:port を変更できます。

バインド

ServiceEndpoint インスタンスのバインディング インスタンスは、wsdl:binding 定義にマップされます。 特定の wsdl:portType 定義に関連付ける必要がある wsdl:binding 定義とは異なり、WCF のバインディングは、どのコントラクトにも依存しません。

バインディングは、バインド要素のコレクションで構成されます。 各要素は、エンドポイントがクライアントと通信する方法の一部分を記述します。 また、バインディングには、エンドポイントの MessageVersionEnvelopeVersion を示すための AddressingVersion があります。

プロパティ WSDL マッピング
Name エンドポイントの既定の名前で使用されます。この名前は、バインディング名にコントラクト名を追加し、アンダースコアで区切った形で表記されます。
Namespace targetNamespace 定義の wsdl:binding

インポートでは、WSDL ポートに関連付けられたポリシーがある場合、インポートされたバインディング名前空間は、targetNamespace 定義の wsdl:port にマップされます。
BindingElementCollection (CreateBindingElements() メソッドによって返されるプロパティとして) wsdl:binding 定義に対するさまざまなドメイン固有の拡張。通常は、ポリシー アサーション。
MessageVersion エンドポイントの EnvelopeVersion および AddressingVersion

MessageVersion.None が指定されている場合、WSDL バインディングは SOAP バインディングを格納せず、WSDL ポートは WS-Addressing コンテンツを含みません。 この設定は、通常、Plain Old XML (POX) エンドポイントに対して使用されます。

BindingElements

エンドポイント バインディングのバインド要素は、ポリシー アサーションなど、wsdl:binding のさまざまな WSDL 拡張にマップされます。

SOAP バインディングのトランスポート URI (Uniform Resource Identifier) は、バインディングの TransportBindingElement によって決まります。

AddressingVersion

バインディングの AddressingVersion は、wsd:port で使用されるアドレス指定のバージョンにマップされます。 WCF は、SOAP 1.1 および SOAP 1.2 アドレス、および WS-Addressing 08/2004 および WS-Addressing 1.0 エンドポイント参照をサポートします。

EnvelopeVersion

バインディングの EnvelopeVersion は、wsdl:binding で使用される SOAP のバージョンにマップされます。 WCF は、SOAP 1.1 および SOAP 1.2 バインディングをサポートします。

コントラクト

ContractDescription インスタンスの ServiceEndpoint インスタンスは、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 インスタンスのコレクションを格納します。

主に、2 つの操作動作 OperationDescription および DataContractSerializerOperationBehavior が、XmlSerializerOperationBehavior を WSDL ドキュメントにマップする方法に関与しています。

プロパティ 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 は、操作バインディングおよび操作メッセージを扱います。

DataContractSerializerOperationBehavior

操作の DataContractSerializerOperationBehavior は、その操作の WSDL メッセージとバインディングをエクスポートする IWsdlExportExtension の実装です。 XML スキーマ型は、XsdDataContractExporter を使用してエクスポートされます。 また、DataContractSerializerOperationBehavior では、その操作に使用する使用方法、スタイル、およびスキーマ エクスポーターとインポーターを決定します。

プロパティ WSDL マッピング
DataContractFormatAttribute この属性の Style プロパティは、操作の wsdl:binding/wsdl:operation/soap:operation/@style 値にマップされます。

DataContractSerializerOperationBehavior は、WSDL のスキーマ型のリテラル使用だけをサポートします。

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 値にマップされます。

Messages

MessageDescription インスタンスは、操作の wsdl:portType/wsdl:operation/wsdl:input メッセージまたは wsdl:portType/wsdl:operation/wsdl:output メッセージによって参照される wsdl:message にマップされます。 MessageDescription には、本文とヘッダーがあります。

プロパティ WSDL マッピング
Action メッセージの SOAP アクションまたは WS-Addressing アクション。

Action 文字列 "*" を使用する操作は、WSDL では表示されません。
Direction MessageDirection.Inputwsdl:input にマップされます。

MessageDirection.Outputwsdl:output にマップされます。
ProtectionLevel このメッセージの wsdl:message 定義に関連付けられたセキュリティ ポリシーの保護アサーション
Body メッセージのメッセージ本文
Headers メッセージのヘッダー
ContractDescription.NameOperationContract.Name エクスポートするときに、wsdl:message/@name 値を派生するために使用されます。

メッセージ本文

MessageBodyDescription インスタンスは、メッセージ本文の wsdl:message/wsdl:part 定義にマップされます。 メッセージ本文は、ラップされている場合とベアの場合があります。

プロパティ WSDL マッピング
WrapperName スタイルが RPC でない場合は、@name が "parameters" に設定された wsdl:message/wsdl:part によって参照される要素名に WrapperName がマップされます。
WrapperNamespace スタイルが RPC でない場合は、@name が "parameters" に設定された wsdl:message/wsdl:part の要素の名前空間に WrapperNamespace がマップされます。
Parts このメッセージ本文のメッセージ部分
ReturnValue ラッパー要素が存在する場合 (ドキュメント ラップ スタイルまたは RPC スタイル) は、そのラッパー要素の子要素。存在しない場合は、メッセージに最初に現れる wsdl:message/wsdl:part

メッセージ部分

MessagePartDescription インスタンスは、wsdl:message/wsdl:part、およびメッセージ部分が指す XML スキーマ型または要素にマップされます。

プロパティ 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 には、DefaultType インスタンスの FaultDescription プロパティ値に相当する 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 値を派生するために使用されます。

関連項目