【问题标题】:How many workflow runtimes should there be running for in an Asp.Net application?在 Asp.Net 应用程序中应该运行多少个工作流运行时?
【发布时间】:2009-11-30 18:35:49
【问题描述】:

似乎没有多少 Windows Workflow Foundation 大师 :(

以下是我面临的几个挑战:

在 Asp.Net MVC 应用程序中应该运行多少个工作流运行时?每个应用程序、每个会话或每个请求一个?

工作流运行时应该多久启动和停止一次?每个应用程序实例一次、每个会话一次还是每个请求一次?

在上述选项中做一个或另一个的利弊是什么?

欢迎任何cmets或建议,

谢谢,

库伦

【问题讨论】:

    标签: c# asp.net-mvc workflow-foundation


    【解决方案1】:

    通常每个应用程序只运行一个工作流运行时。可以定义多个,并且可能存在一些复杂的场景,这是可取的,但极不可能。我看不到任何情况下,同一配置的多个运行时会在同一进程中运行。

    对于网络托管的工作流程,您确实需要SqlWorkflowPersistenceService。 IIS 期望能够在对应用程序影响最小的情况下回收应用程序池。因此,您需要保留闲置的工作流,以便它们能够在此类循环中存活。

    在类似的注释中,您应该使用ManualWorkflowSchedulerService,它与 ASP.NET 线程的使用配合得很好,它也非常方便地通过工作流对请求执行端到端处理以响应单线程。请务必包含useActiveTimers="true" 属性,以便延迟活动起作用。

    根据上述情况,您需要确保任何活动工作流完成或空闲的时间不会超过应用程序池的关闭时间限制。否则,回收 IIS 可能会在工作流持续存在之前强制进程终止。

    至于启动和停止工作流,再次很难看到您不希望它在应用程序启动时启动并保持运行的情况。我想如果你有一个从不空闲但只是从头到尾运行的工作流并且你只是偶尔运行这样的工作流,那么启动运行时然后结束它可能会更简单。但是,即使这样会变得一团糟,我也不会费心在应用程序启动时启动它并完成它。

    【讨论】:

    • @Anthony:感谢您的回复。我已经配置为将 SqlWorkflowPersistenceService 和 ManualWorkflowSchedulerService 添加到运行时; IIS 回收问题是需要注意的一个非常重要的问题。应用池被回收时是否有可以拦截的事件?
    • 没有特定的回收事件。我能想到的最接近的是应用程序在回收时再次启动,但这将与当前执行的任何工作流处于不同的过程中。我只是确定 Shutdown timeout 很清楚工作流的运行时间。如果时间过长,那么其中一些工作可能不属于 Web 进程。
    【解决方案2】:

    在 Asp.Net MVC 应用程序中应该运行多少个工作流运行时?
    每个应用程序一个,除非出于可扩展性目的需要更多(请求太多)

    工作流运行时应该多久启动和停止一次?
    通常,每个应用程序实例一次

    优点和缺点都是微不足道的,您可以通过更多会话请求和实例更好地扩展,但管理它们需要更多开销。

    您最好的选择是使用您需要的足够多的东西,并在必要时进行扩展。

    【讨论】:

    • @Robert:感谢您的快速回复!你在asp.net环境下做过很多WF吗?
    • 没问题,我用过一点,我可能只学到了足够的东西让自己陷入严重的麻烦。希望以后有机会更多地使用它。
    • 这就是我试图阻止自己陷入的,“严重的麻烦”我的意思是。我正在进行的项目计划在无状态 Web 环境中广泛使用 WF。希望我能通过 WF 找到方法,为这个项目实施最佳解决方案。
    • 是的,不幸的是,您似乎必须通过那个阶段才能获得任何合法的成就。祝你好运,我希望你的项目成功。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    相关资源
    最近更新 更多