WCF 拡張に対するカスタム メタデータのエクスポート

Windows Communication Foundation (WCF) では、メタデータのエクスポートは、サービス エンドポイントを説明したり、それらを対応する標準化表現に投影したりするプロセスです。クライアントは、これを利用してサービスの使用方法を理解します。 カスタム メタデータは、システム指定のメタデータ エクスポーターでエクスポートできない XML 要素で構成されます。 通常、これは、ユーザー定義動作のカスタム WSDL 要素とバインド要素、およびバインディングとコントラクトの機能と要件に関するポリシー アサーションを含みます。

ここでは、カスタム WSDL またはポリシー アサーションのエクスポートについて説明し、エクスポート プロセス自体には重点を置きません。 メタデータがカスタムであるか、システムによって作成されたかに関係なく、メタデータをエクスポートおよびインポートする型の使用方法の詳細については、「メタデータのエクスポートとインポート」を参照してください。

概要

System.ServiceModel.Description.ServiceMetadataBehavior を使用してメタデータを公開すると、システム指定の属性とバインディングを使用して WCF がサポートできるすべてのコントラクトとバインディングについて、System.ServiceModel.Description.ServiceDescription が検査され、XSD と WSDL (ポリシー アサーションを含む) が生成されます。 ただし、カスタム動作属性やバインド要素を適切にエクスポートするには、あらかじめサポートしておく必要があります。

ここでは、次の内容について説明します。

  1. WSDL を発行する前に WSDL の生成データを公開する System.ServiceModel.Description.IWsdlExportExtension インターフェイスを実装して使用する方法。

  2. WSDL データに含まれるポリシー アサーションをエクスポートする前にポリシー データを公開する System.ServiceModel.Description.IPolicyExportExtension インターフェイスを実装して使用する方法。

カスタム WSDL とポリシー アサーションのインポートに関する詳細については、「WCF 拡張に対するカスタム メタデータのインポート」を参照してください。

カスタム WSDL 要素のエクスポート

操作の動作、コントラクトの動作、エンドポイントの動作、またはバインド要素 IWsdlExportExtension (それぞれ IOperationBehaviorIContractBehaviorIEndpointBehaviorSystem.ServiceModel.Channels.BindingElement) を実装し、エクスポートしようとしているサービスの説明に動作またはバインド要素を挿入します (動作挿入の詳細については、「動作を使用したランタイムの構成と拡張」を参照してください)。 IWsdlExportExtension はエンドポイントごとに呼び出され、コントラクトがエクスポートされていない場合は、各エンドポイントによって最初にコントラクトがエクスポートされます。 必要に応じて、次のいずれかのエクスポート プロセスに参加できます。

ExportContract メソッドは、エクスポートされる IWsdlExportExtension インスタンスに含まれるすべての System.ServiceModel.Description.ContractDescription 実装で呼び出されます。 ExportEndpoint メソッドは、エクスポートされる IWsdlExportExtension インスタンスを持つすべての System.ServiceModel.Description.ServiceEndpoint 実装で呼び出されます。

詳細については、「方法: カスタム WSDL をエクスポートする」とサンプル「カスタム WSDL パブリケーション」を参照してください。

カスタム ポリシー アサーションのエクスポート

IPolicyExportExtensionBindingElement を実装し、バインド要素をバインディングに追加して、バインディングのサポートとコントラクトの機能に関するカスタム ポリシー アサーションを WSDL に書き込みます。 バインディングに実装されたバインド要素をエクスポートすると、IPolicyExportExtension が 1 回呼び出され、PolicyConversionContextExportPolicy メソッドに渡します。 PolicyConversionContext インスタンスに対してこのメソッドを使用すると、メッセージ、操作、またはエンドポイント サブジェクトで WSDL バインディングに結び付けられているポリシー アサーションを追加できます。

詳細については、「方法: カスタム ポリシー アサーションをエクスポートする」を参照してください。

関連項目