我想在我的工作流程中实施一个解决方案,该解决方案将执行以下操作:
在工作流程级别,我想实现一个故障处理程序,它将暂停任何异常的工作流程。
然后在某个时候,实例将获得Resume()命令。
我想要实现的是,当收到Resume()命令时,实例将再次执行先前失败的活动(并导致异常),然后继续执行他必须做的任何事情。
我的问题是什么:
当暂停然后在Fault Handler中恢复时,实例就完成了。简历当然不会让实例返回执行, 因为在故障处理程序中,在暂停活动之后 - 我什么都没有。所以 很明显,工作流程的执行就此结束。
我想在工作流级别实现Fault Handler,而不是使用While + Sequence活动来包装工作流中的每个活动(如下所述: Error Handling In Workflows)因为我的工作流程非常繁重 - 这看起来很糟糕。 它应该是一种通用的处理..
你有什么想法吗?
谢谢。
答案 0 :(得分:1)
如果您正在使用状态机工作流,我处理需要人工干预修复的错误的技术是创建一个额外的“状态活动”节点,指示“错误”状态,如STATE_FAULTED
。然后每个状态都有一个错误处理程序捕获任何异常,记录异常并将状态更改为STATE_FAULTED
,传递当前活动,引发的异常类型以及您可能需要的任何其他上下文信息等信息。
在STATE_FAULTED初始化中,您可以侦听外部命令(您的Resume()命令,或任何适合您需要的命令),当一切正常时,您可以切换到先前的状态并继续执行。
答案 1 :(得分:0)
我担心这不起作用。工作流中的错误处理类似于Try / Catch块,重试的唯一方法是将所有内容都换成循环,如果出现错误则再次执行循环。
根据您尝试处理的错误类型,您可以通过创建自定义活动来实现您的目标,这些活动将自己的执行逻辑包装在Try / Catch中并包含所需的重试逻辑。