カスタム検索基準
CustomFindCriteria サンプルでは、ロジックを使用するカスタム スコープ一致の作成方法とカスタム探索サービスの実装方法を示します。 クライアントは、カスタム スコープ一致機能を使用して、システムによって提供される WCF Discovery の検索機能を改良および拡張します。 このサンプルでは次のシナリオを扱います。
クライアントは電卓サービスを検索します。
検索を絞り込むために、クライアントはカスタム スコープ一致ルールを使用する必要があります。
このルールに従って、サービスは、エンドポイントがクライアントによって指定されたスコープのいずれかと一致した場合、クライアントに応答を送り返します。
対象
カスタム探索サービスの作成。
アルゴリズムに基づくカスタム スコープ一致の実装
ディスカッション
クライアントで、"OR" 型の一致条件が検索されています。 サービスは、エンドポイントのスコープがクライアントによって指定されたスコープのいずれかと一致した場合、応答を送り返します。 この場合、クライアントは、次のいずれかのスコープを含む電卓サービスを検索します。
net.tcp://Microsoft.Samples.Discovery/RedmondLocation
net.tcp://Microsoft.Samples.Discovery/SeattleLocation
net.tcp://Microsoft.Samples.Discovery/PortlandLocation
これを行うために、クライアントはカスタム スコープ一致を URI で渡すことで、カスタム スコープ一致を使用するようにサービスに指示します。 サービスは、カスタム スコープ一致を容易にするために、カスタム スコープ一致ルールを理解し、関連する一致ロジックを実装するカスタム探索サービスを使用する必要があります。
クライアント プロジェクトで Program.cs ファイルを開きます。 ScopeMatchBy
オブジェクトの FindCriteria
フィールドが特定の URI に設定されていることに注意してください。 この識別子はサービスに送信されます。 サービスがこのルールを理解できない場合、クライアントの検索要求は無視されます。
サービス プロジェクトを開きます。 カスタム探索サービスの実装には、次の 3 つのファイルを使用します。
AsyncResult.cs: これは Discovery メソッドに必要な
AsyncResult
の実装です。CustomDiscoveryService.cs: このファイルにはカスタム探索サービスが実装されています。 この実装では、DiscoveryService クラスを拡張し、必要なメソッドをオーバーライドします。 OnBeginFind メソッドの実装に注意してください。 このメソッドは、ルールに基づくカスタム スコープ一致がクライアントによって指定されているかどうかをチェックします。 これはクライアントが前に指定したカスタム URI です。 カスタム ルールが指定されている場合は、その後に "OR" 一致ロジックを実装するコード パスが続きます。
このカスタム ロジックでは、サービスに含まれている各エンドポイントのスコープがすべてチェックされます。 エンドポイントのスコープのいずれかがクライアントによって指定されたスコープのいずれかに一致した場合、探索サービスはクライアントに送り返す応答にそのエンドポイントを追加します。
CustomDiscoveryExtension.cs: 探索サービスの実装の最後の手順は、このカスタム探索サービスの実装をサービス ホストに関連付けることです。 ここで使用するヘルパー クラスは
CustomDiscoveryExtension
クラスです。 このクラスは DiscoveryServiceExtension クラスを拡張します。 ユーザーは GetDiscoveryService メソッドをオーバーライドする必要があります。 この場合、このメソッドは、前に作成されたカスタム探索サービスのインスタンスを返します。PublishedEndpoints
は、ReadOnlyCollection<T> に追加されるすべてのアプリケーション エンドポイントを含む ServiceHost です。 カスタム探索サービスは、これを使用して内部リストを設定します。 ユーザーは、その他のエンドポイント メタデータも追加できます。
最後に、Program.cs を開きます。 ServiceDiscoveryBehavior と CustomDiscoveryExtension
の両方がホストに追加されていることに注意してください。 これが完了し、探索メッセージの受信に使用されるエンドポイントがホストに追加されると、アプリケーションがカスタム探索サービスを使用できるようになります。
クライアントがサービスのアドレスを知ることなくサービスを検索できることを確認します。
サンプルをセットアップ、ビルド、および実行するには
プロジェクトを含むソリューションを開きます。
プロジェクトをビルドします。
サービス アプリケーションを実行します。
クライアント アプリケーションを実行します。