動的再構成
このサンプルでは、Windows Communication Foundation (WCF) ルーティング サービスを示します。ルーティング サービスは、コンテンツ ベースのルーターをアプリケーションに簡単に追加できるようにする WCF コンポーネントです。このサンプルでは、標準の WCF 電卓のサンプルを改良し、ルーティング サービスを使用して通信するようにします。このサンプルでは、実行時にルーティング サービスを動的に再構成する方法を示します。
注 : |
---|
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。
<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\RoutingServices\DynamicReconfiguration
|
サンプルの詳細
このサンプルでは、実行時にルーティング サービスを動的に再構成するために、5 秒ごとにタイマーを作動させ、新しい RoutingConfiguration オブジェクトを作成して適用します。この構成は、通常の電卓のエンドポイントまたは丸め処理を行う電卓のエンドポイントのいずれかを示しています。電卓クライアント アプリケーションは、ルーティング サービスがその時点でどちらのサービスにルーティングするように構成されているかに応じて、いずれか一方のサービスからメッセージを受け取ります。
ルーティング サービスのカスタム動作を介した動的再構成機能が使用されます。このカスタム動作は、5 秒ごとに作動する単純なスレッド タイマーを含むサービス拡張をアタッチします。このスレッド タイマーにより、UpdateRules
メソッドへのコールバックが発生し、新しいルーティング構成が作成および適用されます。実際の配置では、このコールバックは、別の種類のイベント (SQL-Event 通知や WS-Discovery アナウンスなど) の結果として行われる可能性があります。
このサンプルを使用するには
Visual Studio 2010 を使用して DynamicReconfiguration.sln を開きます。
ソリューション エクスプローラーを開くには、[表示] メニューの [ソリューション エクスプローラ] をクリックします。
Visual Studio で F5 キーまたは F6 キーを押します。
F5 キーを押したときに必要なプロジェクトが自動的に起動されるようにする場合は、ソリューションを右クリックし、[プロパティ] をクリックします。左ペインの [共通プロパティ] で [スタートアップ プロジェクト] をクリックします。[マルチ スタートアップ プロジェクト] ボタンを選択し、すべてのプロジェクトに [開始] アクションを設定します。
F6 キーを使用してプロジェクトをビルドする場合は、次のアプリケーションを開始する必要があります。
電卓クライアント (./CalculatorClient/bin/client.exe)
電卓サービス (./CalculatorService/bin/service.exe)
丸め処理を行う電卓サービス (./RoundingCalcService/bin/service.exe)
ルーティング サービス (./RoutingService/bin/RoutingService.exe)
電卓クライアントのコンソール ウィンドウで、Enter キーを押してクライアントを開始し、電卓サービス操作を呼び出します。
ルーティング サービスは、丸め処理を行う電卓と通常の電卓に交互にメッセージをルーティングします。これはルーティング構成が 5 秒ごとに動的に変化するためです。ルーティング サービスがどちらのエンドポイントにメッセージを送信するように構成されているかに応じて、異なる出力がクライアント コンソールに表示されます。
Enter キーを 5 秒以上にわたって繰り返し押して、サービスから返される結果が変化することを確認します。
次に、ルーター サービスが丸め処理を行う電卓サービスにメッセージをルーティングするように構成されている場合に返される出力を示します。
Add(100,15.99) = 116
Subtract(145,76.54) = 68.5
Multiply(9,81.25) = 731.2
Divide(22,7) = 3.1次に、ルーティング サービスが通常の電卓サービスにメッセージをルーティングするように構成されている場合に返される出力を示します。
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
また、電卓サービスと丸め処理を行う電卓サービスは、呼び出された操作のログをそれぞれのコンソール ウィンドウに出力します。
終了するには、クライアント コンソール ウィンドウで「quit」と入力するか、Enter キーを押します。
サービスを終了するには、サービス コンソール ウィンドウで Enter キーを押します。
シナリオ
このサンプルでは、1 つのエンドポイントを介して複数の種類または実装のサービスを公開することを可能にするコンテンツ ベースのルーターとして機能するルーターを示します。
実際のシナリオ
Contoso では、すべてのサービスを仮想化して 1 つのエンドポイントのみを公開し、そのエンドポイントを通じて複数の異なる種類のサービスへのアクセスを提供したいと考えています。この場合は、ルーティング サービスのコンテンツ ベースのルーティング機能を使用して受信要求の送信先を決定します。