ブリッジとエラー処理

このサンプルでは、Windows Communication Foundation (WCF) ルーティング サービスを、各種のバインディングを使用するクライアントとサービス間の通信をブリッジするために使用する方法を示します。また、バックアップ サービスを使用してフェールオーバーのシナリオに対処する方法も示します。ルーティング サービスは、コンテンツ ベースのルーターをアプリケーションに簡単に追加できるようにする WCF コンポーネントです。このサンプルでは、標準の WCF 電卓のサンプルを改良し、ルーティング サービスを使用して通信するようにします。

Ee667246.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\RoutingServices\ErrorHandlingAndBridging

サンプルの詳細

このサンプルの電卓クライアントは、ルーターによって公開されるエンドポイントにメッセージを送信するように構成されています。ルーティング サービスは、送信されてきたすべてのメッセージを受け入れ、電卓サービスに対応するエンドポイントに転送するように構成されています。プライマリ電卓サービス、バックアップ電卓サービス、および電卓クライアントの構成と、ルーティング サービスによるクライアントとサービス間の通信の処理方法を次に示します。

  • 電卓クライアントは BasicHttpBinding を使用するように構成され、電卓サービスは NetTcpBinding を使用するように構成されています。ルーティング サービスは、電卓サービスに送信する前に、必要に応じて自動的にメッセージを変換します。また、電卓クライアントがアクセスできるように応答も変換します。

  • ルーティング サービスは、プライマリ電卓サービスとバックアップ電卓サービスの 2 つの電卓サービスを認識します。まず、ルーティング サービスは、プライマリ電卓サービスのエンドポイントとの通信を試みます。エンドポイントがダウンしているためにこの試行が失敗すると、次に、バックアップ電卓サービスのエンドポイントとの通信を試みます。

したがって、クライアントから送信されたメッセージはルーターで受信され、実際の電卓サービスに再ルーティングされます。電卓サービスのエンドポイントがダウンしている場合、ルーティング サービスは、バックアップ電卓サービスのエンドポイントにメッセージをルーティングします。バックアップ電卓サービスからのメッセージはサービス ルーターに送り返され、ルーターから電卓クライアントに渡されます。

Ee667246.note(ja-jp,VS.100).gif注 :
バックアップのリストには、複数のエンドポイントを定義しておくことができます。その場合、バックアップ サービスのエンドポイントがダウンしていると、ルーティング サービスはリスト内の次のバックアップ エンドポイントへの接続を試み、接続が成功するまで試行を続けます。

このサンプルを使用するには

  1. Visual Studio 2010 を使用して、RouterBridgingAndErrorHandling.sln を開きます。

  2. Visual Studio で F5 キーまたは F6 キーを押します。

    1. F5 キーを押したときに必要なプロジェクトが自動的に起動されるようにする場合は、ソリューションを右クリックし、[プロパティ] をクリックします。[共通プロパティ][スタートアップ プロジェクト] ノードで、[マルチ スタートアップ プロジェクト] を選択し、すべてのプロジェクトを [開始] に設定します。

    2. F6 キーを使用してプロジェクトをビルドする場合は、次のアプリケーションを開始します。

      1. 電卓クライアント (./CalculatorClient/bin/client.exe)

      2. 電卓サービス (./CalculatorService/bin/service.exe)

      3. ルーティング サービス (./RoutingService/bin/RoutingService.exe)

  3. 電卓クライアントで、Enter キーを押してクライアントを起動します。

    次の出力が表示されます。

    Add(100,15.99) = 115.99
    Subtract(145,76.54) = 68.46
    Multiply(9,81.25) = 731.25
    Divide(22,7) = 3.14285714285714

コードまたは App.config で構成可能

サンプルは、提供された時点では、App.config ファイルを使用してルーターの動作を定義するように構成されています。App.config ファイルの名前を別の名前に変更して認識されないようにし、ConfigureRouterViaCode() に対するメソッド呼び出しのコメントを解除することもできます。どちらの方法でも、ルーターの動作は同じになります。

シナリオ

このサンプルでは、プロトコル ブリッジおよびエラー ハンドラーとして機能するサービス ルーターを示します。このシナリオでは、コンテンツ ベースのルーティングは発生しません。ルーティング サービスは、構成済みの一連の送信先エンドポイントに直接メッセージを渡すように構成された透過的なプロキシ ノードとして機能します。さらに、通信するように構成されたエンドポイントへの送信の試行時にエラーが発生した場合に、そのエラーを透過的に処理する追加の手順も実行します。ルーティング サービスをプロトコル ブリッジとして使用することで、外部の通信と内部の通信に対して別々のプロトコルを定義することができます。

実際のシナリオ

Contoso では、外部には相互運用可能なサービスのエンドポイントを公開し、内部ではパフォーマンスを最適化したいと考えています。そのため、外部には BasicHttpBinding を使用するエンドポイントを通じてサービスを公開し、内部ではルーティング サービスを使用して、そのサービスの NetTcpBinding を使用するエンドポイントにその接続をブリッジしています。さらに、Contoso では、運用サービスのいずれかが一時的に停止した場合でも、サービスの提供を継続できるようにしたいと考えています。そのため、ルーター サービスの背後で複数のエンドポイントを仮想化し、必要に応じて、エラー処理機能を使用して自動的にバックアップ エンドポイントにフェールオーバーされるようにしています。