Windows Workflow Foundation 4(WF4)错误处理

时间:2010-03-30 12:27:54

标签: error-handling workflow-foundation workflow-foundation-4

将错误消息从WF4工作流程返回到托管ASP.NET MVC应用程序的最佳方法是什么?我需要工作流不终止,但继续处于活动状态,然后将有关错误的消息传递回托管应用程序,以便用户可以采取其他操作,但我不知道该怎么做。

3 个答案:

答案 0 :(得分:6)

为了使您的工作流程保持活跃,您需要在工作流程中捕获异常。向您的工作流添加TryCatch活动,在Catch块中,您可以使用Send或自定义活动将数据发送到主机应用程序。

一个例外是将WorkflowApplication.OnUnhandledException与持久性一起使用并指定abort。在这种情况下,工作流的内存状态刚刚被删除,工作流可以重新加载到上一个持久状态。如果你这样做,你需要确保使用Perist活动,无论什么时候无法重做,你的工作流程都会被保存。

答案 1 :(得分:2)

对于WF4来说,TryCatch还不够。此外,从工作流主机处理UnhandledException事件并不能真正告诉您哪些活动失败以及原因。

建议的批准是在WF4中使用TryCatch和Activity跟踪。有关这方面的详细摘要,请访问:http://msmvps.com/blogs/theproblemsolver/archive/2009/11/27/trycatch-activity-in-wf4.aspx

您可以使用跟踪参与者扩展工作流主机,并使用catch处理程序封装可能出错的活动,处理异常并创建新的TrackingRecord,以更好地说明发生的情况。

答案 2 :(得分:-1)

我能想到的三种方式......

WorkflowApplication.OnUnhandledException是告诉您何时抛出未处理的异常,但我不确定您是否可以从中恢复。这似乎不是一条好路。

WorkflowApplication.PersistableIdle可让您了解工作流程活动何时创建书签并闲置工作流程。此时,当您从书签恢复时,工作流正在等待您返回并返回更多信息以传回工作流程。这可能是您最好的选择,因为它的实施和使用相对简单。

另一个问题是创建一个extension,您的活动可以从工作流程上下文中获取。扩展为您提供了一种更灵活的工作流外部通信方式,但您必须对其进行编码并确保它们按预期工作。书签+扩展名将是您最灵活的选择。