2009-12-02 89 views
0

工作流实例我想要实现我的工作流程解决方案,将做到以下几点:暂停在故障处理程序

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

然后在某个时候,实例会得到一个Resume()命令。

我想要实现的是,当收到Resume()命令时,实例将再次执行失败的活动(并引发异常),然后继续执行他必须执行的任何操作。

什么是我的问题:

  1. 当暂停,然后再恢复故障处理程序中,该实例是刚刚完成。当然,恢复过程不会让实例返回到执行 ,因为在故障处理程序中,在暂停活动之后 - 我什么都没有。所以 显然工作流的执行在那里结束。

  2. 我确实想实现故障处理工作流程中的水平,而不是使用而+ Sequence活动来包装工作流程中的每个活动(如这里所描述: Error Handling In Workflows),因为我相当沉重的工作流程 - 这将看起来像一个地狱。 它应该是有点通用处理..

你有什么想法?

谢谢。

回答

0

恐怕不行。工作流中的错误处理类似于Try/Catch块,重试的唯一方法是将所有内容都包含在循环中,并在出现错误时再次执行循环。

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

+0

谢谢你的回答。 呃...我知道这个解决方案。是的,这就是网络上许多文章所描述的内容。 但我仍然在寻找我描述过的类型的优雅解决方案。 – Alex 2009-12-03 07:03:40

1

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

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