工作流中的错误处理

Windows Workflow Foundation 中的错误处理指的是以异步方式处理异常。 这意味着工作流运行时引擎会捕获在活动中(显式或隐式)引发的异常,然后将其安排在队列中以便以后处理。 这与常规异常处理不同,因为在常规异常处理中,如果异常是在 try 块中引发的,则它可以由相应的 catch exception 块捕获,也可以立即对用户引发。

异常的原因

在工作流中,异常可能通过下列方式生成:

捕获异常

在错误处理中,如果引发异常的活动不能处理异常,则该异常将被传输到其父活动以进行解决。 在处理异常或工作流运行时引擎终止工作流实例之前,该异常将被传输到工作流层次结构中。

异常由 FaultHandlerActivity 活动来处理。 每个 FaultHandlerActivity 活动都与 .NET Framework 异常类型相关联,并且如果引发的异常与该异常类型匹配,则该活动还包含一组所执行的活动。 FaultHandlerActivity 活动是包含 0-n 个 FaultHandlerActivity 活动的 FaultHandlersActivity 活动的父级。 FaultHandlersActivity 可以是任何复合活动的子活动。

Windows Workflow Foundation 中错误处理的目标是撤消已发生异常的活动的部分工作及不成功的工作。 FaultHandlerActivity 活动的完成从不被视为其相关活动的成功完成。 这意味着,当执行 FaultHandlerActivity 活动时,引发异常的活动被置于错误状态。 当 FaultHandlerActivity 活动完成时,相关联的活动被置于关闭状态。 此外,相关联活动的任何同级活动(如 ParallelActivity 活动的其他子级)被置于取消状态,然后置于关闭状态。 它们永远不会成功执行。

错误处理与补偿

错误处理与补偿之间的区别是,补偿只能对已成功完成的活动执行,不能对引发异常和处于错误状态的活动执行;但是,在与引发异常的活动相关联的 FaultHandlerActivity 活动内可以执行 CompensateActivity 活动。 例如,补偿处理的典型情形是,一项活动成功完成,但在工作流后面的另一活动中引发异常。 该活动的错误处理程序包含一个 CompensateActivity,后者可撤消在工作流中以前完成的任何操作。 若要对此进行进一步扩展,您可能要在工作流后面由另一活动引发 ItemDiscontinuedException 之后向客户退款。

有关错误处理的更多信息,请参见使用 FaultHandlerActivity 活动 使用 ThrowActivity 活动

有关补偿处理的更多信息,请参见使用 CompensateActivity 活动

请参见

参考

ThrowActivity

概念

使用 FaultHandlerActivity 活动
使用 ThrowActivity 活动

其他资源

开发工作流

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。