如何在基于ASP.Net Web的工作流中使用WF DelayActivity

时间:2009-09-16 07:48:55

标签: workflow workflow-foundation

我有一个Web应用程序,我正在使用Windows Workflow Foundation添加工作流功能。我的解决方案基于K. Scott Allen在OdeToCode上的Orders Workflow示例。在开始时,我没有意识到警告的重要性“如果您使用延迟活动并为活动计时器配置活动计时器,则这些事件将发生在与HTTP请求无关的后台线程上”。我现在需要使用Delay活动,它不能像他的解决方案架构一样工作。有没有人遇到这个并找到了一个很好的解决方案?这个例子与许多地方相关联,但我没有看到其他人遇到过这个问题,对我来说这似乎是一个显示限制。

编辑:问题是工作流的结果通过HttpContext返回到Web应用程序。我正在使用带有useActiveTimers的ManualWorkflowSchedulerService,这适用于大多数情况,因为工作流事件是从Web应用程序触发的,当返回工作流结果并且Web应用程序可以继续处理时,HttpContext仍然存在。当使用延迟活动时,处理发生在后台线程上,当它尝试将结果返回给Web应用程序时,没有有效的HttpContext(因为没有Http请求),因此进一步处理失败。也就是说,webapp正在尝试处理工作流结果,但是没有http请求。

我认为我需要在工作流程中进行所有延迟活动后处理,而不是转移到网络应用程序。

干杯。

1 个答案:

答案 0 :(得分:0)

您没有描述您遇到的问题。但也许这有一些帮助。

您可以将ManualWorkflowSchedulerService与useActiveTimers一起使用,工作流将在另一个线程上继续。通常情况下这很好,因为您的HTTP请求已经完成,并不重要。

如果您需要完全控制,则工作流运行时将允许您使用GetLoadedWorkflows()函数处理所有已加载的工作流。这将返回WorkflowInstance对象的隐藏。使用这些可以调用GetWorkflowNextTimerExpiration()来检查哪些已过期。如果是,你可以手动恢复它。在这种情况下,您希望使用ManualWorkflowSchedulerService和useActiveTimers = false,以便您也可以控制最后一个线程。但是在大多数情况下使用useActiveTimers = true可以很好地工作。