2009-09-16 26 views
0

我有一个Web应用程序,我将工作流功能添加到使用Windows Workflow Foundation。我的解决方案基于K. Scott Allen在OdeToCode上的Orders Workflow示例。在开始时,我没有意识到警告的重要性,“如果您使用Delay活动并为手动调度服务配置活动计时器,这些事件将发生在与HTTP请求无关的后台线程上”。我现在需要使用延迟活动,而且不像他的解决方案架构那样工作。有没有人遇到过这个问题,并找到了一个很好的解决方案?这个例子与许多地方有关,但我还没有看到任何人遇到过这个问题,这对我来说似乎有点阻碍。如何在基于ASP.Net网络的工作流程中使用WF DelayActivity

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

我想我需要在工作流程内完成所有的延迟活动处理,而不是交给网络应用程序。

干杯。

+0

你遇到的确切问题是什么? – 2009-09-16 07:54:45

回答

0

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

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

如果您需要完全控制,则工作流运行时会让您使用GetLoadedWorkflows()函数获取所有加载的工作流的句柄。这将返回WorkflowInstance对象的集合。使用这些你可以调用GetWorkflowNextTimerExpiration()来检查哪些已过期。如果有人可以手动恢复它。在这种情况下,您希望将useWorkflowSchedulerService与useActiveTimers = false一起使用,以便您还可以控制最后一个线程。但是在大多数情况下使用useActiveTimers = true可以很好地工作。

相关问题