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 のバインディングは、どのコントラクトにも依存しません。
バインディングは、バインド要素のコレクションで構成されます。 各要素は、エンドポイントがクライアントと通信する方法の一部分を記述します。 また、バインディングには、エンドポイントの MessageVersion と EnvelopeVersion を示すための 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.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 でない場合は、@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 値を派生するために使用されます。 |