在Fault Handler中暂停工作流实例

时间:2009-12-02 14:05:06

标签: workflow workflow-foundation

我想在我的工作流程中实施一个解决方案,该解决方案将执行以下操作:

在工作流程级别,我想实现一个故障处理程序,它将暂停任何异常的工作流程。

然后在某个时候,实例将获得Resume()命令。

我想要实现的是,当收到Resume()命令时,实例将再次执行先前失败的活动(并导致异常),然后继续执行他必须做的任何事情。

我的问题是什么:

  1. 当暂停然后在Fault Handler中恢复时,实例就完成了。简历当然不会让实例返回执行, 因为在故障处理程序中,在暂停活动之后 - 我什么都没有。所以 很明显,工作流程的执行就此结束。

  2. 我想在工作流级别实现Fault Handler,而不是使用While + Sequence活动来包装工作流中的每个活动(如下所述: Error Handling In Workflows)因为我的工作流程非常繁重 - 这看起来很糟糕。 它应该是一种通用的处理..

  3. 你有什么想法吗?

    谢谢。

2 个答案:

答案 0 :(得分:1)

如果您正在使用状态机工作流,我处理需要人工干预修复的错误的技术是创建一个额外的“状态活动”节点,指示“错误”状态,如STATE_FAULTED。然后每个状态都有一个错误处理程序捕获任何异常,记录异常并将状态更改为STATE_FAULTED,传递当前活动,引发的异常类型以及您可能需要的任何其他上下文信息等信息。

在STATE_FAULTED初始化中,您可以侦听外部命令(您的Resume()命令,或任何适合您需要的命令),当一切正常时,您可以切换到先前的状态并继续执行。

答案 1 :(得分:0)

我担心这不起作用。工作流中的错误处理类似于Try / Catch块,重试的唯一方法是将所有内容都换成循环,如果出现错误则再次执行循环。

根据您尝试处理的错误类型,您可以通过创建自定义活动来实现您的目标,这些活动将自己的执行逻辑包装在Try / Catch中并包含所需的重试逻辑。