次の方法で共有


メタデータの取得

RetrieveMetadata サンプルでは、サービスからメタデータを動的に取得して通信するエンドポイントを選択するクライアントを実装する方法を示します。 このサンプルは、入門に基づいています。 サービスは、2 つのエンドポイント (basicHttpBinding バインディングを使用したベース アドレスのエンドポイントと、 バインディングを使用してセキュリティで保護された {wsHttpBinding}/secure) を公開するように変更されました。 クライアントは、エンドポイント アドレスとバインドを使用してクライアントを構成する代わりに、MetadataExchangeClient クラスを使用してサービスのメタデータを動的に取得し、ServiceEndpointCollection クラスを使用してメタデータをWsdlImporterとしてインポートします。

このサンプルのセットアップ手順とビルド手順は、このトピックの最後にあります。

クライアント アプリケーションは、インポートされた ServiceEndpointCollection を使用して、サービスと通信するクライアントを作成します。 クライアント アプリケーションは、取得された各エンドポイントを反復処理し、 ICalculator コントラクトを実装する各エンドポイントと通信します。 次のサンプル コードに示すように、クライアントが各エンドポイントと通信するように構成されるように、取得したエンドポイントに適切なアドレスとバインドが提供されます。

// 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();
    }
}

クライアント コンソール ウィンドウには、各エンドポイントに送信された操作が表示され、アドレス パスとバインド名が表示されます。

サンプルを設定、ビルド、実行するには

  1. Windows Communication Foundation サンプル One-Time セットアップ手順を実行していることを確認します。

  2. ソリューションの C#、C++、または Visual Basic .NET エディションをビルドするには、「 Windows Communication Foundation サンプルのビルド」の手順に従います。

  3. 単一または複数のコンピューター間の構成でサンプルを実行するには、「Windows Communication Foundation Samplesの実行」の手順に従います。