メタデータのエクスポートとインポート

Windows Communication Foundation (WCF) では、メタデータのエクスポートは、サービス エンドポイントを説明したり、それらを対応する標準化表現に投影したりするプロセスです。クライアントでは、これを利用してサービスの使用方法を理解できます。 サービス メタデータのインポートは ServiceEndpoint インスタンス、またはサービス メタデータの一部を生成するプロセスです。

メタデータのエクスポート

メタデータを System.ServiceModel.Description.ServiceEndpoint インスタンスからエクスポートするには、MetadataExporter 抽象クラスの実装を使用します。 WsdlExporter 型は、WCF に含まれる MetadataExporter 抽象クラスの実装です。

System.ServiceModel.Description.WsdlExporter 型は Web サービス記述言語 (WSDL: Web Services Description Language) メタデータを生成します。このメタデータには、MetadataSet インスタンス内にカプセル化されたポリシー表現が関連付けられています。 System.ServiceModel.Description.WsdlExporter インスタンスを使用すると、ContractDescription オブジェクトと ServiceEndpoint オブジェクトのメタデータを反復してエクスポートできます。 ServiceEndpoint オブジェクトのコレクションをエクスポートして、特定のサービス名に関連付けることもできます。

注意

WsdlExporter は、ContractDescription メソッドを使用するか、ContractDescription インスタンスの ContractDescription.GetContract の一部として作成された ServiceDescription インスタンスなど、共通言語ランタイム (CLR) の型情報を含む ServiceHost インスタンスからメタデータをエクスポートする場合にのみ使用できます。 WsdlExporter インスタンスをサービス メタデータからインポートした場合や、型情報を使用せずに作成した場合は、ContractDescription を使用してメタデータをエクスポートできません。

メタデータのインポート

WSDL ドキュメントのインポート

WCF のサービス メタデータをインポートするには、MetadataImporter 抽象クラスの実装を使用します。 System.ServiceModel.Description.WsdlImporter 型は、WCF に含まれる MetadataImporter 抽象クラスの実装です。 WsdlImporter 型は、MetadataSet オブジェクトにまとめられた、結び付けられているポリシーを使用して WSDL メタデータをインポートします。

WsdlImporter 型を使用すると、メタデータをインポートする方法を制御できます。 すべてのエンドポイント、すべてのバインディング、またはすべてのコントラクトをインポートできます。 特定の WSDL サービス、バインディング、またはポートの種類に関連付けられたすべてのエンドポイントをインポートすることもできます。 また、特定の WSDL ポートのエンドポイント、特定の WSDL バインディングのバインディング、または特定の WSDL ポートの種類のコントラクトをインポートすることもできます。

また、WsdlImporter では、インポートする必要がないコントラクトのセットを指定できるようにする KnownContracts プロパティが公開されています。 この場合、WsdlImporter は、同じ修飾名を持つコントラクトをメタデータからインポートする代わりに、KnownContracts プロパティのコントラクトを使用します。

ポリシーのインポート

WsdlImporter 型は、メッセージ、操作、およびエンドポイントのポリシー サブジェクトに関連付けられたポリシー表現を収集した後で、IPolicyImportExtension コレクションの PolicyImportExtensions 実装を使用してポリシー表現をインポートします。

ポリシーのインポート ロジックは、同じ WSDL ドキュメント内のポリシー表現へのポリシーの参照を自動的に処理します。インポート ロジックは wsu:Id 属性または xml:id 属性で識別されます。 ポリシーのインポート ロジックは、アプリケーションでポリシーの循環参照が発生しないようにポリシー表現のサイズを 4096 ノードに制限します。ノードとは、wsp:Policywsp:Allwsp:ExactlyOne、または wsp:policyReference 要素です。

また、ポリシーのインポート ロジックは、ポリシー表現を自動的に正規化します。 入れ子になったポリシー表現や wsp:Optional 属性は正規化されません。 実行される正規化処理の量は 4096 ステップに制限されます。各ステップでは、ポリシー アサーション、または wsp:ExactlyOne 要素の子要素が生成されます。

WsdlImporter 型は、異なる WSDL ポリシー サブジェクトに結び付けられているポリシー代替手段の組み合わせを最大で 32 組まで試行します。 どの組み合わせを使用しても完全にインポートできない場合は、最初の組み合わせを使用して部分カスタム バインドが作成されます。

エラー処理

MetadataExporter 型や MetadataImporter 型は、どちらも Errors プロパティを公開します。このプロパティには、エクスポート プロセスおよびインポート プロセスで発生したエラー メッセージおよび警告メッセージのコレクションを格納でき、ツールの実装時に使用できます。

WsdlImporter 型は、通常、インポート プロセスでキャッチされた例外に対して例外をスローし、対応するエラーをその Errors プロパティに追加します。 ただし、ImportAllContractsImportAllBindingsImportAllEndpoints、および ImportEndpoints の各メソッドはこうした例外をスローしないため、Errors プロパティを調べて、これらのメソッドの呼び出し時に問題が発生したかどうかを確認する必要があります。

WsdlExporter 型は、エクスポート プロセスでキャッチされたすべての例外を再スローします。 Errors プロパティでは、この例外はエラーとしてキャプチャされません。 WsdlExporter は、例外をスローするとエラー状態になるため、再使用できません。 ワイルドカード アクションを使用しているために操作をエクスポートできない場合や、重複したバインディング名を検出した場合、WsdlExporter はその Errors プロパティに警告を追加します。

このセクションの内容

方法: メタデータをサービス エンドポイントにインポートする
ダウンロードされたメタデータを説明オブジェクトにインポートする方法について説明します。

方法: メタデータをサービス エンドポイントからエクスポートする
説明オブジェクトをメタデータにエクスポートする方法について説明します。

ServiceDescription と WSDL 参照
説明オブジェクトと WSDL の間のマッピングについて説明します。

方法: Svcutil.exe を使用してコンパイル済みのサービス コードからメタデータをエクスポートする
Svcutil.exe を使用して、コンパイル済みアセンブリのサービス型、コントラクト型、およびデータ型のメタデータをエクスポートする方法について説明します。

データ コントラクト スキーマの参照
XML シリアル化用の共通言語ランタイム (CLR) 型を表すために DataContractSerializer が使用する XML スキーマ (XSD) のサブセットについて説明します。

関連項目

WsdlExporter

WsdlImporter

関連項目