次の方法で共有


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

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 オブジェクトのコレクションをエクスポートして、特定のサービス名に関連付けることもできます。

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

メタデータのインポート

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

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

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

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

ポリシーのインポート

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

ポリシーのインポート ロジックは、同じ 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 プロパティに警告を追加します。

このセクションの内容

リファレンス

WsdlExporter

WsdlImporter

参照

概念

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