Workflow 在错误处理程序中挂起工作流实例

Workflow 在错误处理程序中挂起工作流实例,workflow,workflow-foundation,Workflow,Workflow Foundation,我想在我的工作流中实施一个解决方案,该解决方案将执行以下操作: 在工作流级别,我想实现一个故障处理程序,它将针对任何异常暂停工作流 然后,该实例有时会得到一个Resume()命令 我想要实现的是,当收到Resume()命令时,实例将再次执行先前失败(并导致异常)的活动,然后继续执行他必须执行的任何操作 我的问题是: 当在故障处理程序中挂起然后恢复时,实例刚刚完成。当然,恢复不会使实例返回到执行状态, 因为在故障处理程序中,在挂起活动之后-我什么都没有。所以 显然,工作流的执行到此结束 我确实希望

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

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

然后,该实例有时会得到一个Resume()命令

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

我的问题是:

  • 当在故障处理程序中挂起然后恢复时,实例刚刚完成。当然,恢复不会使实例返回到执行状态, 因为在故障处理程序中,在挂起活动之后-我什么都没有。所以 显然,工作流的执行到此结束

  • 我确实希望在工作流级别实现故障处理程序,而不是使用While+Sequence活动来包装工作流中的每个活动(如下所述: )因为我的工作流程非常繁重,这看起来就像地狱。 这应该是一种通用的处理方式

  • 你有什么想法吗


    谢谢。

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


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

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


    在初始化出错的状态下,您可以监听外部命令(Resume()命令或任何适合您需要的命令),当一切正常时,您可以切换到上一个状态并继续执行。

    谢谢您的回答。好。。。我知道这个解决方案。是的,这是网络上许多文章所描述的。但我仍然在寻找我所描述的那种优雅的解决方案。