次の方法で共有


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

Windows Communication Foundation (WCF) では、メタデータのエクスポートは、サービス エンドポイントを記述し、クライアントがサービスの使用方法を理解するために使用できる並列の標準化された表現に投影するプロセスです。 サービス メタデータのインポートは、サービス メタデータから ServiceEndpoint インスタンスまたはパーツを生成するプロセスです。

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

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

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

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

メタデータのインポート

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

WCF でサービス メタデータをインポートするには、 MetadataImporter 抽象クラスの実装を使用します。 System.ServiceModel.Description.WsdlImporter型は、WCF に含まれるMetadataImporter抽象クラスの実装です。 WsdlImporter型は、 オブジェクトにバンドルされたポリシーがアタッチされた WSDL メタデータをインポートします。

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

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

ポリシーのインポート

WsdlImporter型は、メッセージ、操作、およびエンドポイント ポリシーのサブジェクトにアタッチされているポリシー式を収集し、PolicyImportExtensions コレクション内のIPolicyImportExtension実装を使用してポリシー式をインポートします。

ポリシー インポート ロジックは、同じ WSDL ドキュメント内のポリシー式へのポリシー参照を自動的に処理し、 wsu:Id 属性または xml:id 属性で識別されます。 ポリシー インポート ロジックは、ポリシー式のサイズを 4096 ノードに制限することで、循環ポリシー参照からアプリケーションを保護します。ノードは、 wsp:Policywsp:Allwsp:ExactlyOnewsp:policyReferenceのいずれかの要素です。

ポリシーのインポート ロジックでは、ポリシー式も自動的に正規化されます。 入れ子になったポリシー式と wsp:Optional 属性は正規化されません。 実行される正規化処理の量は 4,096 ステップに制限され、各ステップでポリシー アサーションまたは 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

こちらも参照ください