次の方法で共有


メッセージ永続化カスタム例外ハンドラーのサンプルを実行する

Message Persisting Custom Exception Handler サンプルは、エラー メッセージを受信し、含まれる Microsoft BizTalk メッセージを抽出し、それらをディスク ファイルとしてファイル システムに書き込む、疎結合の汎用ハンドラーを示しています。

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

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

メッセージ永続化カスタム例外ハンドラー サンプルは、このサンプルで使用される EAIGenericHandler.odx オーケストレーションが、障害発行オーケストレーション プロセス (EAIProcess.odx) で使用されるスキーマに依存しないという点で、カスタム例外ハンドラーの修復と再送信のサンプルとは異なります。 具体的には、EAIGenericHandler.odx オーケストレーションは、エラー メッセージから元のメッセージを System.Xml として取得します。EAIProcess.odx オーケストレーションで使用されるスキーマに基づいて、型指定されたメッセージではなく XmlDocument インスタンス。 また、コードが簡単に列挙できるコレクションとしてメッセージを返します。

次に、カスタム例外ハンドラー (EAIGenericHandler.odx) は、"Denied" メッセージと "Approved" メッセージの両方をファイル システムの場所 \Source\Samples\Exception Handling\Test\Filedrop\EAIGenericHandler.PostTmpMsg に書き込みます。

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

インストール

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

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

カスタム例外ハンドラーのメッセージ永続化サンプルを実行するには

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

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

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

  4. EAIGenericHandler.PostTmpMsg という名前のフォルダーを開きます (\Source\Samples\Exception Handling\Test\Filedrop\ フォルダー内)。 元のメッセージが表示されます。

サンプルのしくみ

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

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

FaultCode フィールド値が 2000 のメッセージをサブスクライブする EAIGenericHandler という名前のカスタム フォールト ハンドラー オーケストレーションは、新しいエラー メッセージを取得します。 オーケストレーションのコードは、例外 (エラー) メッセージからすべてのメッセージを抽出し、ディスク ファイルに書き込みます。