【问题标题】:How to use a WF DelayActivity in an ASP.Net web based workflow如何在基于 ASP.Net Web 的工作流中使用 WF DelayActivity
【发布时间】:2011-03-06 19:07:17
【问题描述】:

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

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

我认为我需要在工作流中进行所有延迟后的活动处理,而不是交给网络应用。

干杯。

【问题讨论】:

  • 您遇到的具体问题是什么?

标签: workflow workflow-foundation


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-09-07
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多