探索プロキシのサンプル

このサンプルでは、既存のサービスに関する情報を格納するために探索プロキシの実装を作成する方法、およびクライアントからそのプロキシに情報のクエリを行う方法を示します。このサンプルは、3 つのプロジェクトで構成されます。

  • Service: 探索プロキシに自らを登録する単純な Windows Communication Foundation (WCF) 電卓サービス。

  • Discovery Proxy: 探索プロキシ サービスの実装。

  • Client: 探索プロキシを呼び出してサービスを検索する WCF クライアント アプリケーション。

使用例

探索プロキシの実装

Dd807497.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\DiscoveryProxy

DiscoveryProxy

このサンプルでは、Program.cs ファイルの Main メソッドで、DiscoveryProxy 型のサービスをホストする方法を示します。このメソッドによって、DiscoveryEndpoint 型と AnnouncementEndpoint 型の 2 つのエンドポイントが公開されます。どちらのエンドポイントも、TCP をトランスポートとして使用します。DiscoveryEndpoint は、probeEndpointAddress パラメーターで指定された URI をリッスンします。クライアントは、ここにプローブ メッセージを送信して、プロキシに対するデータのクエリを行うことができます。AnnouncementEndpoint は、announcementEndpointAddress パラメーターで指定された URI をリッスンします。これは、プロキシがアナウンスをリッスンする場所です。プロキシは、オンライン アナウンスを受け取るとサービスをキャッシュに追加し、オフライン アナウンスを受け取るとサービスをキャッシュから削除します。

DiscoveryProxy の実装は DiscoveryProxy.cs に含まれています。プロキシは DiscoveryProxyBase クラスから継承する必要があり、AsyncResult の実装を必要とします。インスタンス化すると、プロキシは新しい Dictionary を作成し、それを使用して認識している要素を格納します。

ファイルは、Proxy Cache Methods および Discovery Proxy Implementation という 2 つの領域に分かれています。Proxy Cache Methods 領域には、Dictionary の更新、Dictionary に対するクエリの実行、およびユーザーへのデータの出力に使用するメソッドが含まれています。Discovery Proxy Implementation 領域には、アナウンスおよびプローブ機能に必要なオーバーライドされたメソッドが含まれています。これらによって、オンライン アナウンス、オフライン アナウンス、またはプローブ メッセージを受け取った後にプロキシで実行されるアクションが定義されます。

Service

Service プロジェクトの Program.cs ファイルでは、探索プロキシと同じ URI がアナウンス エンドポイントに使用されています。これは、サービスがこのエンドポイントを使用して送信したアナウンスを、プロキシが同じエンドポイントを使用して受け取るためです。サービスは、DiscoveryBehavior を使用し、それにアナウンス エンドポイントを追加します。

Client

Client プロジェクトは、プロキシと同じ URI をプローブ エンドポイントに使用します。これは、このシナリオのプローブも、プロキシで使用できるエンドポイントに明確にユニキャストされるからです。クライアントは、この既知のアドレスに接続してサービスのクエリを実行し、サービスを見つけるとそれに接続します。

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

  1. Visual Studio 2010 でプロジェクト ソリューションを読み込み、プロジェクトをビルドします。

  2. 最初に、[ソリューションの基本ディレクトリ]\DiscoveryProxy\bin\debug に生成された探索プロキシ アプリケーションを実行します。探索プロキシを最初に実行しなければならないのは、サービスでアナウンスを送信するために TCP アナウンス エンドポイントを起動しておく必要があるからです。

  3. 2 番目に、[ソリューションの基本ディレクトリ]\Service\bin\debug に生成されたサービス アプリケーションを実行します。起動時に、サービスから探索プロキシのアナウンス エンドポイントにアナウンスが送信され、サービスがプロキシのキャッシュに登録されます。

  4. 次に、[ソリューションの基本ディレクトリ]\Client\bin\debug に生成されたクライアント アプリケーションを実行します。クライアントは、プロキシに対してクエリを実行してサービスのアドレスを取得し、サービスに接続します。

  5. 最後に、クライアント、サービス、プロキシの順に終了します。プロキシは、サービスのオフライン アナウンスを受け取るまでは実行されている必要があります。