次の方法で共有


カスタム検索基準

このサンプルでは、ロジックを使用するカスタム スコープ一致の作成方法とカスタム探索サービスの実装方法を示します。クライアントは、カスタム スコープ一致機能を使用して、システムによって提供される WCF Discovery の検索機能を改良および拡張します。このサンプルでは次のシナリオを扱います。

  1. クライアントは電卓サービスを検索します。

  2. 検索を絞り込むために、クライアントはカスタム スコープ一致ルールを使用する必要があります。

  3. このルールに従って、サービスは、エンドポイントがクライアントによって指定されたスコープのいずれかと一致した場合、クライアントに応答を送り返します。

使用例

  • カスタム探索サービスの作成。

  • アルゴリズムに基づくカスタム スコープ一致の実装

説明

クライアントは "OR" 一致条件を検索します。サービスは、エンドポイントのスコープがクライアントによって指定されたスコープのいずれかと一致した場合、応答を送り返します。この場合、クライアントは、次のいずれかのスコープを含む電卓サービスを検索します。

  1. net.tcp://Microsoft.Samples.Discovery/RedmondLocation

  2. net.tcp://Microsoft.Samples.Discovery/SeattleLocation

  3. net.tcp://Microsoft.Samples.Discovery/PortlandLocation

これを行うために、クライアントはカスタム スコープ一致を URI で渡すことで、カスタム スコープ一致を使用するようにサービスに指示します。サービスは、カスタム スコープ一致を容易にするために、カスタム スコープ一致ルールを理解し、関連する一致ロジックを実装するカスタム探索サービスを使用する必要があります。

クライアント プロジェクトで Program.cs ファイルを開きます。FindCriteria オブジェクトの ScopeMatchBy フィールドが特定の URI に設定されていることに注意してください。この識別子はサービスに送信されます。サービスがこのルールを理解できない場合、クライアントの検索要求は無視されます。

サービス プロジェクトを開きます。カスタム探索サービスの実装には、次の 3 つのファイルを使用します。

  1. AsyncResult.cs: これは Discovery メソッドに必要な AsyncResult の実装です。

  2. CustomDiscoveryService.cs: このファイルはカスタム探索サービスを実装します。この実装では、DiscoveryService クラスを拡張し、必要なメソッドをオーバーライドします。OnBeginFind メソッドの実装に注意してください。このメソッドは、ルールに基づくカスタム スコープ一致がクライアントによって指定されているかどうかをチェックします。これはクライアントが前に指定したカスタム URI です。カスタム ルールが指定されている場合は、その後に "OR" 一致ロジックを実装するコード パスが続きます。

    このカスタム ロジックでは、サービスに含まれている各エンドポイントのスコープがすべてチェックされます。エンドポイントのスコープのいずれかがクライアントによって指定されたスコープのいずれかに一致した場合、探索サービスはクライアントに送り返す応答にそのエンドポイントを追加します。

  3. CustomDiscoveryExtension.cs: 探索サービスの実装の最後の手順は、このカスタム探索サービスの実装をサービス ホストに関連付けることです。ここで使用するヘルパー クラスは CustomDiscoveryExtension クラスです。このクラスは DiscoveryServiceExtension クラスを拡張します。ユーザーは GetDiscoveryService メソッドをオーバーライドする必要があります。この場合、このメソッドは、前に作成されたカスタム探索サービスのインスタンスを返します。PublishedEndpoints は、ServiceHost に追加されたすべてのアプリケーション エンドポイントを含む ReadOnlyCollection です。カスタム探索サービスは、これを使用して内部リストを設定します。ユーザーは、その他のエンドポイント メタデータも追加できます。

最後に、Program.cs を開きます。ServiceDiscoveryBehaviorCustomDiscoveryExtension の両方がホストに追加されていることに注意してください。これが完了し、探索メッセージの受信に使用されるエンドポイントがホストに追加されると、アプリケーションがカスタム探索サービスを使用できるようになります。

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

サンプルを設定、ビルド、および実行するには

  1. プロジェクトを含むソリューションを開きます。

  2. プロジェクトをビルドします。

  3. サービス アプリケーションを実行します。

  4. クライアント アプリケーションを実行します。

Ee818239.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\CustomFindCriteria