次の方法で共有


方法: MetadataExchangeClient を使用してメタデータを取得する

WS-MetadataExchange (MEX) プロトコルを使用してメタデータをダウンロードするには、MetadataExchangeClient クラスを使用します。 取得されたメタデータ ファイルは、MetadataSet オブジェクトとして返されます。 返された MetadataSet オブジェクトには、MetadataSection オブジェクトのコレクションが含まれ、コレクションの各オブジェクトには、特定のメタデータの言語と識別子が含まれます。 返されたメタデータはファイルに書き込むことができます。また、返されたメタデータに Web サービス記述言語 (WSDL: Web Services Description Language) ドキュメントが含まれている場合は、WsdlImporter を使用してメタデータをインポートできます。

アドレスを取得する MetadataExchangeClient コンストラクターは、アドレスの URI (Uniform Resource Identifier) スキームに一致する MetadataExchangeBindings 静的クラスでバインディングを使用します。 または、使用するバインディングを明示的に指定できるようにする MetadataExchangeClient コンストラクターを使用することもできます。 指定したバインディングは、すべてのメタデータ参照を解決するために使用されます。

他の Windows Communication Foundation (WCF) クライアントと同様に、MetadataExchangeClient 型では、エンドポイント構成名を使用してクライアント エンドポイント構成を読み込むためのコンストラクターが提供されます。 指定したエンドポイント構成では、IMetadataExchange コントラクトを指定する必要があります。 エンドポイント構成のアドレスは読み込まれないため、アドレスを受け取る GetMetadata オーバーロードのいずれかを使用する必要があります。 EndpointAddress インスタンスを使用してメタデータ アドレスを指定した場合、MetadataExchangeClient は、指定したアドレスが MEX エンドポイントを指すものと想定します。 メタデータ アドレスを URL として指定した場合は、使用する MetadataExchangeClientMode として、MEX または HTTP GET のいずれかを指定する必要もあります。

重要

既定では、MetadataExchangeClient は、WSDL と XML スキーマのインポートおよびインクルードを含むすべての参照を解決します。 ResolveMetadataReferences プロパティを false に設定すると、この機能を無効にできます。 解決する参照の最大数を制御するには、MaximumResolvedReferences プロパティを使用します。 バインディングでこのプロパティと MaxReceivedMessageSize プロパティを組み合わせて使用すると、取得するメタデータのサイズを制御できます。

MetadataExchangeClient を使用してメタデータを取得するには

  1. 新しい MetadataExchangeClient オブジェクトを作成するには、バインディング、エンドポイント構成名、またはメタデータのアドレスを明示的に指定します。

  2. 必要に応じて MetadataExchangeClient を構成します。 たとえば、メタデータを要求するときに使用する証明書を指定したり、メタデータ参照の解決方法を制御したり、OperationTimeout プロパティを設定してメタデータ要求がタイムアウトするまでの待機時間を制御したりできます。

  3. MetadataSet メソッドのいずれかを呼び出して、取得されたメタデータを含む GetMetadata オブジェクトを取得します。 MetadataExchangeClient の構築時にアドレスを明示的に指定した場合は、引数を受け取らない GetMetadata オーバーロードしか使用できません。

MetadataExchangeClient を使用してメタデータ ファイルをダウンロードし、列挙する方法を次のコード例に示します。

// Get metadata documents.
Console.WriteLine("URI of the metadata documents retrieved:");
MetadataExchangeClient metaTransfer
  = new MetadataExchangeClient(httpGetMetaAddress.Uri, MetadataExchangeClientMode.HttpGet);
metaTransfer.ResolveMetadataReferences = true;
MetadataSet otherDocs = metaTransfer.GetMetadata();
foreach (MetadataSection doc in otherDocs.MetadataSections)
    Console.WriteLine(doc.Dialect + " : " + doc.Identifier);

コードのコンパイル

このコード例をコンパイルするには、System.ServiceModel.dll アセンブリを参照し、System.ServiceModel.Description 名前空間をインポートする必要があります。

関連項目