Share via


ワークフロー内のエラー処理

Windows Workflow Foundation でのエラー処理とは、非同期で例外を処理することを指します。つまり、アクティビティで明示的または暗黙的にスローされた例外は、ワークフロー ランタイム エンジンによりキャッチされ、後の時点で処理されるようにキューにスケジュールされます。これは、try ブロックで例外がスローされる場合、その例外は適切な catch exception ブロックでキャッチされることもあれば、ユーザーに即時にスローされることもあるという点で通常の例外処理とは異なります。

例外の原因

ワークフローでは、例外は、次の方法で生成されます。

  • TransactionScopeActivity または CompensatableTransactionScopeActivity でのトランザクションのタイムアウト

  • ThrowActivity アクティビティを使用してワークフローからスローされた明示的な例外詳細については、「ThrowActivity アクティビティの使用」を参照してください。

  • コード アクティビティ、またはカスタム アクティビティのコード側のハンドラからスローされた .NET Framework の例外

  • ワークフローで使用されているライブラリやコンポーネントなどの外部コードからスローされた例外

例外のキャッチ

エラー処理では、例外をスローしたアクティビティがそれを処理できない場合、その例外を親アクティビティに転送して、解決を求めます。例外は、処理されるまで、または、ワークフロー ランタイム エンジンによってワークフロー インスタンスが終了するまで、ワークフロー階層内を上に向かって転送されていきます。

例外処理は、FaultHandlerActivity アクティビティによって行われます。各 FaultHandlerActivity アクティビティは、.NET Framework の例外の種類と関係付けられており、その例外の種類と一致する例外が発生した場合に実行されるアクティビティ セットを格納しています。FaultHandlerActivity アクティビティは、0 ~ n 個の FaultHandlerActivity アクティビティを格納する FaultHandlersActivity アクティビティを親として持ちます。FaultHandlersActivity アクティビティは、あらゆる複合アクティビティの子アクティビティになることができます。

Windows Workflow Foundation でのエラー処理の目的は、例外の発生したアクティビティの一部で失敗した作業を取り消すことです。FaultHandlerActivity アクティビティの完了は、これに関連付けられているアクティビティの成功とは決して見なされません。つまり、FaultHandlerActivity アクティビティの実行中は、例外をスローしたアクティビティはエラー状態になります。FaultHandlerActivity アクティビティが完了すると、関連するアクティビティはクローズド状態になります。また、ParallelActivity アクティビティの他の子アクティビティなどのように、関連付けられているアクティビティの兄弟アクティビティは、キャンセル状態に置かれた後、クローズド状態になります。それらのアクティビティが正常に実行される機会はなくなります。

エラー処理と補正の比較

エラー処理と補正の異なる点として、補正は、正常に完了したアクティビティに対してのみ実行されます。例外をスローしてエラー状態となっているアクティビティには実行されません。ただし、CompensateActivity アクティビティは、例外をスローしたアクティビティに関連付けられている FaultHandlerActivity アクティビティ内では実行できます。たとえば、典型的な補正処理のシナリオとして考えられるのは、アクティビティが正常に完了したものの、その後にワークフロー内の別のアクティビティで例外がスローされる場合です。そのアクティビティのエラー ハンドラは、ワークフロー内で以前に処理されたあらゆるアクションを元に戻す CompensateActivity を持っています。さらに具体的な例としては、後にワークフロー内で別のアクティビティによって ItemDiscontinuedException がスローされた後に、顧客に返金する場合などが考えられます。

エラー処理の詳細については、「FaultHandlerActivity アクティビティの使用」および「ThrowActivity アクティビティの使用」を参照してください。

補正処理の詳細については、「CompensateActivity アクティビティの使用」を参照してください。

関連項目

参照

ThrowActivity

概念

FaultHandlerActivity アクティビティの使用
ThrowActivity アクティビティの使用

その他の技術情報

ワークフローの開発

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.