【问题标题】:ASP.NET and Windows Workflow's (WF) - do we need to stick it in the Application state?ASP.NET 和 Windows 工作流 (WF) - 我们是否需要将其保持在应用程序状态?
【发布时间】:2010-09-22 23:59:27
【问题描述】:

我一直在尝试在我的 ASP.NET 应用程序中使用 WF(实际上,它是 ASP.NET MVC ......但事实上它是 MVC 而不是 WebForms 一点都不重要)。

现在,我可以运行 WF 并且它工作正常,等等,但它以异步方式启动,因此 WF 的任何结果(好 坏)都会丢失页面生命周期。

我发现了一个MSDN article,它说在 ASP.NET 应用程序中,我们需要

  • WorkflowRuntime 放入应用程序状态
  • WorkflowRuntime 实例添加了一个 ManualWorkflowSchedulerService(不管是什么)。
  • 在需要时使用此应用程序状态工作流实例。

这与我学会的做法不同:

  • 使 WorkflowRuntime 成为静态对象,在需要时首先创建。
  • 在您要运行的新工作流上使用此静态 WorkflowRuntime 实例。

那么...哪种方式更好?我们需要将其粘贴到应用程序中吗?两者有什么区别?

我知道这里实际上有两个问题...

  • 应用程序状态与静态对象(使用 lock/null 或 double null checking
  • DefaultWorkFlowSchedulerServiceManualWorkFlowSchedulerService

干杯!

编辑:

  • 第一个问题已回答here
  • 下面回答第二个问题。

【问题讨论】:

    标签: asp.net workflow-foundation


    【解决方案1】:

    我不确定您的第一个问题(尽管我怀疑它们是等价的)。但是,我确信第二个问题:你一定要选择ManualWorkflowSchedulerService。主要原因如下:

    • 这是在工作流实例空闲之前阻止主机应用程序执行的唯一方法。请注意,您必须明确使用 RunWorkflow 方法。
    • ManualWorkflowSchedulerService 重用发出 ASP.NET Web 请求的线程来运行工作流实例。这可确保在任何时候,工作流运行时中的活动线程数都等于 ASP.NET 进程中的活动 Web 请求数。

    查看this sample了解更多信息。

    【讨论】:

    • 第一个答案在别处找到 -> 上面添加的链接。
    猜你喜欢
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 2011-02-04
    相关资源
    最近更新 更多