メタデータの抽出Retrieve Metadata

このサンプルでは、サービスからメタデータを動的に取得し、通信に使用するエンドポイントを選択するクライアントを実装する方法を示します。This sample demonstrates how to implement a client that dynamically retrieves metadata from a service to choose an endpoint with which to communicate. このサンプルは、はじめにに基づいています。This sample is based on the Getting Started. サービスは、2つのエンドポイント (バインディングを使用したベースアドレスのエンドポイント) basicHttpBinding と、バインドを使用した {baseaddress}/セキュリティで保護されたエンドポイントを公開するように変更されてい wsHttpBinding ます。The service has been modified to expose two endpoints—an endpoint at the base address using the basicHttpBinding binding, and a secure endpoint at {baseaddress}/secure using the wsHttpBinding binding. これらのエンドポイント アドレスとバインディングを使用してクライアントを構成する代わりに、クライアントでは MetadataExchangeClient クラスを使用してサービスのメタデータを動的に取得し、ServiceEndpointCollection クラスを使用してこのメタデータを WsdlImporter としてインポートします。Instead of configuring the client with the endpoint addresses and bindings, the client dynamically retrieves the metadata for the service using the MetadataExchangeClient class and then imports the metadata as a ServiceEndpointCollection using the WsdlImporter class.

注意

このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。The setup procedure and build instructions for this sample are located at the end of this topic.

クライアント アプリケーションはインポートされた ServiceEndpointCollection を使用して、サービスとの通信に使用するクライアントを作成します。The client application uses the imported ServiceEndpointCollection to create clients to communicate with the service. クライアント アプリケーションは、取得した各エンドポイントを反復処理し、ICalculator コントラクトを実装した各エンドポイントと通信を行います。The client application iterates through each retrieved endpoint and communicates with each endpoint that implements the ICalculator contract. 適切なアドレスとバインディングは取得したエンドポイントで提供されます。これによって、クライアントは各エンドポイントと通信するように構成されます。次のサンプル コードを参照してください。The appropriate address and binding are provided with the retrieved endpoint, so that the client is configured to communicate with each endpoint, as shown in the following sample code.

// Create a MetadataExchangeClient for retrieving metadata.  
EndpointAddress mexAddress = new EndpointAddress(ConfigurationManager.AppSettings["mexAddress"]);  
MetadataExchangeClient mexClient = new MetadataExchangeClient(mexAddress);  
  
// Retrieve the metadata for all endpoints using metadata exchange protocol (mex).  
MetadataSet metadataSet = mexClient.GetMetadata();  
  
//Convert the metadata into endpoints.  
WsdlImporter importer = new WsdlImporter(metadataSet);  
ServiceEndpointCollection endpoints = importer.ImportAllEndpoints();  
  
CalculatorClient client = null;  
ContractDescription contract = ContractDescription.GetContract(typeof(ICalculator));  
// Communicate with each endpoint that supports the ICalculator contract.  
foreach (ServiceEndpoint ep in endpoints)  
{  
    if (ep.Contract.Namespace.Equals(contract.Namespace) && ep.Contract.Name.Equals(contract.Name))  
    {  
        // Create a client using the endpoint address and binding.  
        client = new CalculatorClient(ep.Binding, new EndpointAddress(ep.Address.Uri));  
        Console.WriteLine("Communicate with endpoint: ");  
        Console.WriteLine("   AddressPath={0}", ep.Address.Uri.PathAndQuery);  
        Console.WriteLine("   Binding={0}", ep.Binding.Name);  
        // Call operations.  
        DoCalculations(client);  
  
        //Closing the client gracefully closes the connection and cleans up resources.  
        client.Close();  
    }  
}  

クライアント コンソール ウィンドウには、各エンドポイントに送信された操作が、そのエンドポイントのアドレス パスとバインディング名と共に表示されます。The client console window displays the operations sent to each of the endpoints, displaying the address path and binding name.

サンプルをセットアップ、ビルド、および実行するにはTo set up, build, and run the sample

  1. Windows Communication Foundation サンプルの1回限りのセットアップ手順を実行したことを確認します。Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. ソリューションの C#、C++、または Visual Basic .NET エディションをビルドするには、「 Windows Communication Foundation サンプルのビルド」の手順に従います。To build the C#, C++, or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. サンプルを単一コンピューター構成または複数コンピューター構成で実行するには、「 Windows Communication Foundation サンプルの実行」の手順に従います。To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

重要

サンプルは、既にコンピューターにインストールされている場合があります。The samples may already be installed on your machine. 続行する前に、次の (既定の) ディレクトリを確認してください。Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

このディレクトリが存在しない場合は、 Windows Communication Foundation (wcf) および Windows Workflow Foundation (WF) のサンプルの .NET Framework 4にアクセスして、すべての WINDOWS COMMUNICATION FOUNDATION (wcf) とサンプルをダウンロードして WFWF ください。If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. このサンプルは、次のディレクトリに格納されます。This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Client\RetrieveMetadata