高度なエラー処理

このサンプルでは、Windows Communication Foundation (WCF) ルーティング サービスを示します。ルーティング サービスは、コンテンツ ベースのルーターをアプリケーションに簡単に追加できるようにする WCF コンポーネントです。このサンプルでは、トランザクションやその他のより複雑なメッセージ概念 (マルチキャストなど) を使用して、ルーティング サービスをエラーから自動的に回復する方法を示します。

Ee667251.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\AdvancedErrorHandling

サンプルの詳細

このサンプルのルーティング サービスは、MSMQ キューからメッセージを読み取り、そのメッセージを 2 つのキュー リストにマルチキャストするように構成されています。サービス キューに使用されるリストとログ キューに使用されるリストです。

既定では、ルーティング サービスで使用するように構成された MSMQ バインディングによってトランザクションの使用がサポートされるため、メッセージはトランザクション メッセージとなり、それぞれのリストの少なくとも 1 つのキューで受信されないと、ルーティング サービスから受信キュー (InQ) に、メッセージが正常にルーティングされたとは報告されません。しがたって、両方のサービス キューまたは両方のログ キューが使用できない場合は、メッセージをルーティングできなかったこと、および受信キューで何らかの処理が必要であることが報告されます。この処理には、メッセージをシステム配信不能キューに移動することが含まれます。

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

  1. Ee667251.Important(ja-jp,VS.100).gif 注 :
    このサンプルを実行する前に、MSMQ をインストールしてください。MSMQ がインストールされていないと、サンプルの実行中に例外メッセージが返されます。MSMQ のインストール手順については、「メッセージ キュー (MSMQ) のインストール」を参照してください。

    Visual Studio 2010 を使用して AdvancedErrorHandling.sln を開きます。

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

    1. F6 キーを使用してアプリケーションをビルドする場合は、./RoutingService/bin/debug/RoutingService.exe にあるアプリケーションを開始する必要があります。
  3. コンソール ウィンドウで、Enter キーを押してクライアントを起動します。

  4. クライアントから、ケースごとに、キューに関するさまざまな統計情報が返されます。

    1. ケース 1 (エラーなし) の場合は、次の出力が返されます。

      受信キューに 0 個のメッセージがあります。
      プライマリ サービス キューに 1 個のメッセージがあります。
      バックアップ サービス キューに 0 個のメッセージがあります。
      プライマリ ログ キューに 1 個のメッセージがあります。
      バックアップ ログ キューに 0 個のメッセージがあります。
      続行するには、Enter キーを押してください。

    2. ケース 3 (プライマリ サービス キューとプライマリ ログ キューのエラー) の場合は、次の出力が返されます。

      受信キューに 0 個のメッセージがあります。
      プライマリ サービス キューが存在しません。
      バックアップ サービス キューに 1 個のメッセージがあります。
      プライマリ ログ キューが存在しません。
      バックアップ ログ キューに 1 個のメッセージがあります。
      続行するには、Enter キーを押してください。

    3. ケース 4 (プライマリ サービス キューとプライマリおよびバックアップ ログ キューのエラー) の場合は、次の出力が返されます。

      受信キューに 0 個のメッセージがあります。
      プライマリ サービス キューが存在しません。
      バックアップ サービス キューに 0 個のメッセージがあります。
      プライマリ ログ キューが存在しません。
      バックアップ ログ キューが存在しません。
      システム配信不能キューに 1 個のメッセージがあります。
      終了するには、Enter キーを押してください。

    4. ケース 2 (プライマリ サービス キューのエラー) の場合は、次の出力が返されます。

      受信キューに 0 個のメッセージがあります。
      プライマリ サービス キューが存在しません。
      バックアップ サービス キューに 1 個のメッセージがあります。
      プライマリ ログ キューに 1 個のメッセージがあります。
      バックアップ ログ キューに 0 個のメッセージがあります。
      続行するには、Enter キーを押してください。

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

サンプルは、提供された時点では、App.config ファイルを使用してルーターの動作を定義するように構成されています。RoutingService\App.config ファイルの名前を別の名前に変更して認識されないようにし、RoutingService\Program.cs の configDriven フィールドの値を false に変更して、コードで定義された構成を使用することもできます。どちらの方法でも、ルーターの動作は同じになります。

シナリオ

このサンプルは、ルーティング サービスで高度なメッセージング機能 (トランザクションや受信コンテキストなど) を処理できること、およびそれらの機能を適切なエラー処理シナリオの一部として利用できることを示しています。

実際のシナリオ

Contoso では、ルーティング サービスを介したトランザクションの受信を利用して、エラー状態のときでも、必要なすべてのサービスで情報を受信できるようにしたいと考えています。さらに、エラーを自動的に適切に処理し、エラー処理ロジックを利用してもメッセージを配信できない場合にはエラーが報告されるようにしたいと考えています。そのために、計画的に特定のエンドポイントにフェールオーバーするようにルーティング サービスを構成し、必要に応じてトランザクションや受信コンテキストの作成、完了、ロールバック、中止などを行うことで、エラー状態をルーティング サービスで処理するようにしています。