次の方法で共有


基本的なサンプル

このサンプルでは、サービスを探索可能にする方法と、探索可能なサービスの検索方法および呼び出し方法を示します。このサンプルは、2 つのプロジェクト (サービスとクライアント) で構成されます。

Dd483369.note(ja-jp,VS.100).gif注 :
このサンプルでは、探索をコードで実装しています。探索を構成で実装するサンプルについては、「構成サンプル」を参照してください。

サービス

これは簡単な電卓サービスの実装です。探索関連のコードは Main にあります。ここでは、次のコードに示すように、 ServiceDiscoveryBehavior がサービス ホストに追加され、UdpDiscoveryEndpoint が追加されます。

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), baseAddress))
{
    serviceHost.AddServiceEndpoint(typeof(ICalculatorService), new 
      WSHttpBinding(), String.Empty);

    // Make the service discoverable over UDP multicast
    serviceHost.Description.Behaviors.Add(new ServiceDiscoveryBehavior());                
    serviceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());

    serviceHost.Open();
    // ...
}

クライアント

クライアントは、DynamicEndpoint を使用してサービスを検索します。DynamicEndpoint は標準エンドポイントで、クライアントが開いたときにサービスのエンドポイントを解決します。この場合、DynamicEndpoint は、サービス コントラクトに基づいてサービスを検索します。DynamicEndpoint は、既定で UdpDiscoveryEndpoint を検索します。サービス エンドポイントが見つかると、クライアントは指定されたバインディングを介してそのサービスに接続します。

public static void Main()
{
   DynamicEndpoint dynamicEndpoint = new DynamicEndpoint( ContractDescription.GetContract(typeof(ICalculatorService)), new WSHttpBinding());
   // ...
}            

クライアントは、DiscoveryClient クラスを使用してサービスを検索する InvokeCalculatorService という名前のメソッドを定義します。DynamicEndpointServiceEndpoint を継承しているため、InvokeCalculatorService メソッドに渡すことができます。この例では、次に DynamicEndpoint を使用して CalculatorServiceClient インスタンスを作成し、電卓サービスのさまざまな操作を呼び出します。

static void InvokeCalculatorService(ServiceEndpoint serviceEndpoint)
{
   // Create a client
   CalculatorServiceClient client = new CalculatorServiceClient(serviceEndpoint);

   Console.WriteLine("Invoking CalculatorService");
   Console.WriteLine();

   double value1 = 100.00D;
   double value2 = 15.99D;

   // Call the Add service operation.
   double result = client.Add(value1, value2);
   Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

   // Call the Subtract service operation.
   result = client.Subtract(value1, value2);
   Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);

   // Call the Multiply service operation.
   result = client.Multiply(value1, value2);
   Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);

   // Call the Divide service operation.
   result = client.Divide(value1, value2);
   Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);
   Console.WriteLine();

   //Closing the client gracefully closes the connection and cleans up resources
   client.Close();
}

このサンプルを使用するには

  1. このサンプルでは HTTP エンドポイントを使用します。このサンプルを実行するには、適切な URL ACL を追加する必要があります。詳細については、次のトピックを参照してください。HTTP および HTTPS の構成。管理者特権で次のコマンドを実行すると、適切な ACL が追加されます。そのままではコマンドが動作しない場合は、代わりに、ドメインとユーザー名を引数に指定して実行してみてください。netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%

  2. Visual Studio 2010 を使用して Basic.sln を開き、サンプルをビルドします。

  3. service.exe アプリケーションを実行します。

  4. サービスが開始したら、client.exe を実行します。

  5. クライアントがサービスのアドレスを知ることなくサービスを検索できたことを確認します。

Dd483369.Important(ja-jp,VS.100).gif 注 :
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。

<InstallDrive>:\WF_WCF_Samples

このディレクトリが存在しない場合は、「.NET Framework 4 向けの Windows Communication Foundation (WCF) および Windows Workflow Foundation (WF) のサンプル」にアクセスして、Windows Communication Foundation (WCF) および WF のサンプルをすべてダウンロードしてください。このサンプルは、次のディレクトリに格納されます。

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Discovery\Basic