次の方法で共有


ExceptionHandler オーケストレーション

ビジネス プロセス管理ソリューションでは、システム例外とアプリケーション例外の 2 種類の例外が使用されます。 システム例外には、たとえば、ネットワーク接続が失敗するリソース エラーなどが含まれます。 このような問題は、時間が経つと自然に解決する可能性があるので、ソリューションはシステム例外の原因となったすべての操作を再試行します。 アプリケーション例外は、論理エラーや不整合など、自然に解決する可能性の少ない事象を原因として生じます。 このソリューションでは、 ExceptionHandlerOrch オーケストレーションを使用して、システム エラーとアプリケーション エラーの両方を処理します。

順序処理ステージ (CableOrder1CableOrder2) とそのサテライト オーケストレーション (アクティブ化分析キャンセル変更完了検証) はすべて ExceptionHandlerOrch を使用します。

Note

このセクションを読み、Microsoft Visual Studio で ExceptionHandlerOrch オーケストレーションを開きます。

アプリケーション エラー

例外ハンドラーは、まず Utilities アセンブリの ErrorHandler オブジェクトの PostError メソッドを呼び出してエラーをログに記録します。 次に例外ハンドラはそのエラーがシステム エラーかアプリケーション エラーかを調べます。 次のスクリーンショットは、アプリケーション例外を処理するオーケストレーションの分岐です。

ExceptionHandler Orchestrati Branch

アプリケーション エラーの場合、オーケストレーションはエラーを記述する文字列を作成し、 ErrorHandlerOrch オーケストレーションを 呼び出します。 このオーケストレーションは、エラーを修正するか操作を終了するかをオペレータが決定できるように、エラーを操作元に送ります。 オペレータがエラーを修正した場合は、ErrorHandlerOrch オーケストレーションからエラー修正のメッセージが返され、操作が再試行されます。 例外ハンドラーは、Utilities アセンブリの Recaller オブジェクトの Invoke メソッドを呼び出すことによってこれを行います。 Recaller オブジェクトはリフレクションを使用して、エラーの原因となったコードを呼び出します。

Invoke の呼び出しが成功すると、例外ハンドラーは終了します。 それ以外の場合は、ループバックして Invoke の呼び出しを再試行します。 Recaller オブジェクトの詳細については、「Recaller オブジェクト」を参照してください。

System Errors (システム エラー)

次の図は、 ExceptionHandler オーケストレーションのシステム エラー ブランチを示しています。

ExceptionHandler オーケストレーション エラー

システム エラーの場合、例外ハンドラーは最初に CheckInterrupt オーケストレーションを呼び出してから、1 分間待機します。 再試行する前に、ネットワーク接続の問題のように一時的な短時間のエラーが解決するのを待つためです。 リモートの呼び出しでは常にネットワーク障害の可能性があります。

Note

割り込み可能なデザインでは、通常、割り込みがあったかどうかを待機期間中またはその直後に調べます。

待機後、ハンドラーは Recaller オブジェクトの Invoke メソッドを使用して元のコードを実行します。 呼び出しに成功すると、例外ハンドラは終了します。 失敗すると、元のコードの実行を 2 度試みます。 3 回の試行がすべて失敗した場合、ハンドラーはエラー文字列を構築し、 ErrorHandlerOrch オーケストレーションを 呼び出します。

システム例外の処理で発生した例外は、例外ブロックがキャッチします。

System Error Branchハンドラー

例外ハンドラは例外の種類を調べて、システム例外の場合は再試行カウンタをカウント ダウンします。アプリケーション例外の場合は、そのフラグを設定します。

ErrorHandlerOrch オーケストレーション

次の図は、 ErrorHandlerOrch オーケストレーションの最初の部分を示しています。

エラー ハンドラー オーケストレーション、最初の部分

ErrorHandlerOrch オーケストレーションは、最初に IsBadOrder パラメーターをテストして、エラーが正しくない順序 (IsBadOrder が true) か、またはその他のエラーかどうかを確認します。 注文が無効である場合は、元の注文の返信先アドレスをメッセージの送信先に指定してメッセージをカスタマ サービス システムに返します。 注文に問題がない場合は、オーケストレーションが注文エラー メッセージを作成して操作システムに送ります。

どちらのエラーでも、オーケストレーションは次に応答メッセージまたは割り込みメッセージを待機します。

エラー ハンドラーの 2 番目の部分

オーケストレーションは応答を受け取ると、呼び出し元に返します。 オーケストレーションが割り込みメッセージを受信すると、そのメッセージが割り込みポートに渡され、カスタム の InterruptException がスローされます

ソリューションが割り込みを使用して処理する方法の詳細については、「 ビジネス プロセス管理ソリューションでの割り込み処理」を参照してください。

参照

ビジネス プロセス管理ソリューションでの例外処理
カスタム例外
ビジネス プロセス管理ソリューションの割り込み処理
Recaller オブジェクト