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 に設定されていることに注意してください。 この識別子はサービスに送信されます。 サービスがこの規則を理解していない場合、クライアントの検索要求は無視されます。
サービス プロジェクトを開きます。 Custom Discovery Service の実装には、次の 3 つのファイルが使用されます。
AsyncResult.cs: これは、Discovery メソッドに必要な
AsyncResult
の実装です。CustomDiscoveryService.cs: このファイルは、カスタム探索サービスを実装します。 この実装は、 DiscoveryService クラスを拡張し、必要なメソッドをオーバーライドします。 OnBeginFind メソッドの実装に注意してください。 このメソッドは、カスタム スコープがルールによって一致するかどうかをクライアントで指定したかどうかを確認します。 これは、クライアントが以前に指定したのと同じカスタム URI です。 カスタム規則が指定されている場合は、"OR" 一致ロジックを実装するコード パスに従います。
このカスタム ロジックは、サービスに含まれる各エンドポイントのすべてのスコープを通過します。 エンドポイントのいずれかのスコープがクライアントによって提供されるスコープのいずれかに一致する場合、探索サービスは、クライアントに返される応答にそのエンドポイントを追加します。
CustomDiscoveryExtension.cs: 探索サービスを実装する最後の手順は、カスタム探索サービスのこの実装をサービス ホストに接続することです。 ここで使用するヘルパー クラスは、
CustomDiscoveryExtension
クラスです。 このクラスは、 DiscoveryServiceExtension クラスを拡張します。 ユーザーは、 GetDiscoveryService メソッドをオーバーライドする必要があります。 この場合、メソッドは以前に作成されたカスタム探索サービスのインスタンスを返します。PublishedEndpoints
は、ReadOnlyCollection<T>に追加されるすべてのアプリケーション エンドポイントを含むServiceHostです。 カスタム探索サービスでは、これを使用して内部リストが設定されます。 ユーザーは、他のエンドポイント メタデータも追加できます。
最後に、Program.csを開きます。
ServiceDiscoveryBehaviorとCustomDiscoveryExtension
の両方がホストに追加されることに注意してください。 これが完了し、ホストが探索メッセージを受信するエンドポイントを持つ場合、アプリケーションはカスタム探索サービスを使用できます。
クライアントがそのアドレスを知らずにサービスを見つけることができることを確認します。
サンプルを設定、ビルド、実行するには
プロジェクトを含むソリューションを開きます。
プロジェクトをビルドします。
サービス アプリケーションを実行します。
クライアント アプリケーションを実行します。