スコープを使用した探索のサンプル
DiscoveryWithScopes のサンプルでは、スコープを使用して、探索可能なエンドポイントを分類する方法、および DiscoveryClient を使用して、エンドポイントの非同期検索を実行する方法を示します。 このサンプルでは、サービスに関しては、エンドポイント探索動作を追加し、その動作を使用してエンドポイントにスコープを追加し、さらにエンドポイントの探索可能性を制御することによって、各エンドポイントの探索をカスタマイズする方法を示します。 クライアントに関しては、DiscoveryClient を作成し、FindCriteria にスコープを追加してスコープが条件となるように検索パラメーターを最適に調整する方法を示します。 また、終了条件を追加することによってクライアントで応答を制限する方法も示します。
サービス機能
このプロジェクトでは、ServiceHost に 2 つのサービス エンドポイントを追加します。 各エンドポイントには EndpointDiscoveryBehavior が関連付けられます。 この動作は、両方のエンドポイントの URI スコープを追加するために使用します。 スコープは、クライアントが検索を最適に調整できるように、これらのエンドポイントを区別するために使用します。 2 番目のエンドポイントについては、Enabled プロパティを false
に設定して探索可能性を無効にすることができます。 これにより、このエンドポイントに関連付けられている探索メタデータが探索メッセージの一部として送信されなくなります。
クライアント機能
FindCalculatorServiceAddress()
メソッドは、DiscoveryClient を使用し、2 つの制限が設定された FindCriteria を渡す方法を示します。 スコープを条件に追加し、MaxResults プロパティを 1 に設定します。 このスコープにより、同じスコープを公開するサービスのみに結果が限定されます。 MaxResults を 1 に設定すると、DiscoveryClient が待機する応答が最大で 1 つのエンドポイントに制限されます。 Find の呼び出しは、タイムアウトになるかエンドポイントが 1 つ見つかるまでスレッドをブロックする同期操作です。
このサンプルを使用するには
このサンプルでは HTTP エンドポイントを使用します。このサンプルを実行するには、適切な URL ACL を追加する必要があります。 詳細については、「HTTP および HTTPS の構成」を参照してください。 管理特権で次のコマンドを実行すると、適切な ACL が追加されます。 そのままではコマンドが動作しない場合は、代わりに、お使いのドメインとユーザー名を引数に指定して実行してみてください。
netsh http add urlacl url=http://+:8000/ user=%DOMAIN%\%UserName%
ソリューションをビルドします。
ビルド ディレクトリからサービス実行可能ファイルを実行します。
クライアント実行可能ファイルを実行します。 クライアントでサービスを検索できることに注意してください。