次の方法で共有


カスタム例外ハンドラーの修復と再送信のサンプルを実行する

「カスタム例外ハンドラーの修復と再送信」サンプルは、ESB および Microsoft BizTalk ベースのアプリケーション プロセスに人間の介入を統合するための非常に効果的な手法を示し、便利な設計パターンを実装します。 サンプル コードは、ESB 例外管理システムにシームレスに統合されます。

このサンプルでは、オーケストレーションでカスタム例外ハンドラーを使用する方法を示します。 オーケストレーション内のプロセス (EAIProcess.odx) でエラーが発生すると、例外ハンドラーによって ESB エラー メッセージが生成されて発行されます。 このエラー メッセージのペイロードには、例外が発生したときに "処理中" であったメッセージ (BizTalk 関連のコンテキスト プロパティを含む) と、BizTalk オーケストレーション エンジンによってキャッチされた現在の System.Exception インスタンスが含まれます。 この場合、"拒否" メッセージと "承認済み" メッセージがエラー メッセージと共に保持されます。

分離された方法でデプロイされ、カスタム例外ハンドラーとして機能する EAIProcessHandler.odx という名前の 2 つ目のオーケストレーションは、EAIProcess.odx オーケストレーションで生成された特定のエラー コードをサブスクライブし、エラー メッセージを使用します。 この例外ハンドラーは、(型指定されたドキュメントとして) 元のメッセージと、最初にエラー メッセージに永続化された System.Exception インスタンスを抽出します。

元のメッセージは、元のすべてのコンテキスト プロパティで処理できるようになりました。 次に、カスタム例外ハンドラー (EAIProcessHandler.odx) は、"Denied" メッセージと "Approved" メッセージの両方を、次の場所にあるファイル システムに書き込みます。

  • 承認済みメッセージ:

    • \Source\Samples\Exception Handling\Test\Filedrop\EAIProcess.PostApproval
  • 修復と再送信が拒否されたメッセージ:

    • \Source\Samples\Exception Handling\Test\Filedrop\EAIProcessHandler.RepairSubmit
  • 拒否されたメッセージ:

    • \Source\Samples\Exception Handling\Test\Filedrop\EAIProcessHandler.PostDecline

    例外ハンドラーは、Microsoft InfoPath 処理命令を使用して、修復および再送信の "拒否" メッセージをファイル システムにシリアル化します。 InfoPath テンプレートを使用すると、ユーザーはフォームを編集し、結果を再送信できます (図 1 を参照)。これにより、メッセージを検証する EAIProcess.odx オーケストレーションが開始されます。

    Repair Resubmit

    図 1

    InfoPath の修復と再送信テンプレートによって生成されたテスト メッセージ

    さらに、ALL という名前の汎用送信ポートがあります。GlobalFaultProcessor パイプラインを使用するように構成されているExceptions_FILE。 このポートは、BizTalk 失敗メッセージ ルーティング メッセージと ESB エラー メッセージの両方で、システム内のすべての例外をサブスクライブします。 例外管理フレームワークでは、それらすべてを 1 つの形式に正規化し、InfoPath 処理命令を使用してフォルダー \Source\Samples\Exception Handling\Test\Filedrop\All_Exceptions にシリアル化します。

インストール

すべての例外管理サンプルでは、同じコア サービスと BizTalk アプリケーション成果物のセットが使用されます。 したがって、すべての例外管理サンプルを実行できるようにするには、例外管理サンプル成果物を 1 回だけインストールする必要があります。 例外管理のサンプルをインストールする方法については、「例外管理サンプル のインストール」を参照してください。

サンプル アプリケーションの実行

カスタム例外ハンドラーの修復と再送信のサンプルを実行するには

  1. このサンプルを初めて実行する前に、受信場所と送信ポート URL が 、\Source\Samples\Exception Handling\Test\Filedrop フォルダー内の適切なディレクトリを指していることを確認してください。 受信場所には EAIProcess.RequestPort フォルダーを指定し、送信ポート URL には EAIProcess.PostApproval フォルダーと EAIProcessHandler.PostDecline フォルダーを指定する必要があります。

  2. GlobalBank.ESB アプリケーションがまだ実行されていない場合は、BizTalk 管理コンソールを使用して起動します。

  3. \Source\Samples\Exception Handling\Test\Data フォルダーにある Request_EAIProcessHandler.xml という名前のサンプル ファイルを、EAIProcess.RequestPort_FILE受信場所として指定されたフォルダー \Source\Samples\Exception Handling\Test\Filedrop\EAIProcess.RequestPort にコピーして、サンプルを開始します。

  4. EAIProcessHandler.PostDecline という名前のフォルダーを開きます (\Source\Samples\Exception Handling\Test\Filedrop フォルダー内)。 例外処理オーケストレーションによって生成された "Declined*" メッセージが表示されます。

  5. EAIProcessHandler.RepairSubmit という名前のフォルダーを開きます (\Source\Samples\Exception Handling\Test\Filedrop フォルダー内)。 例外処理オーケストレーションによって生成された "RepairSubmit" メッセージが表示されます。

  6. RepairSubmit ファイルをダブルクリックして、適切な InfoPath テンプレートで開きます。 編集と再送信の準備ができているメッセージが表示されます。

  7. [単価] フィールドの値を 0 から 2 に変更し、InfoPath フォームのツール バーにある [送信] ボタンをクリックして、編集したドキュメントを BizTalk に送信して処理します。 送信プロセスでは、BizTalk で構成された HTTP 受信場所が使用されます。

  8. EAIProcess.PostApproval フォルダー (\Source\Samples\Exception Handling\Test\Filedrop フォルダー内) に移動します。 これで、単価の更新された値を含む "承認*" ドキュメントが表示されます。

サンプルのしくみ

送信するメッセージは、EAIProcess オーケストレーションをアクティブにします。 EAIProcess オーケストレーションがメッセージを処理すると、1 を単価で除算しようとします。 単価は 0 であるため、0 除算例外が発生します。 オーケストレーションのイベント ハンドラー内のコードは、この例外をキャッチし、エラー メッセージを作成します。 メッセージ内の注文数量が 10 より大きいので、ビジネス ロジックでは、この例外の FaultCode フィールド値が 1000 であることが指示されます。

EAIProcess オーケストレーションは、直接バインドされたポートを介して BizTalk メッセージ ボックスにエラー メッセージを発行し、オーケストレーションが終了します。

FaultCode フィールド値が 1000 のメッセージをサブスクライブする EAIProcessHandler という名前のカスタム 障害ハンドラー オーケストレーションは、新しいエラー メッセージを取得します。 オーケストレーション内のコードは、"拒否" メッセージと InfoPath ファイルを作成し、これを人間の介入の準備ができている EAIProcessHandler.PostDecline フォルダーと EAIProcessHandler.RepairSubmit フォルダーに配置します。