【问题标题】:Can a single Windows Workflow instance be configured to use multiple databases?可以将单个 Windows 工作流实例配置为使用多个数据库吗?
【发布时间】:2014-07-19 00:39:44
【问题描述】:

我们正在为基于 .NET 4.5 的 ASP.Net 应用程序使用 Windows 工作流引擎。 Windows Workflow 应用程序部署为 IIS 应用程序,并使用 web.config 文件中指定的连接信息配置 SQL 持久性。我们现在想要将此应用程序(连同工作流引擎)移动到云中。

关于这次云迁移,我们对我们为 ASP.Net(非 Windows 工作流)应用程序做出的以下决定充满信心:

  • 每个客户都有一个单独的数据库
  • 一个 Web 应用程序将为多个客户提供服务

但是,我们不太确定如何将 Windows Workflow 应用程序迁移到云端。据我了解,我们有以下选择:

  1. 使用单实例/单数据库方法。在这种方法中,我们将有一个工作流实例和一个工作流数据库架构为多个客户服务。
  2. 使用多实例/多数据库方法。在这种方法中,我们将为每个客户拥有一个单独的 IIS 应用程序以及一个单独的数据库架构。
  3. 使用单实例/多数据库方法。在这种方法中,我们将拥有一个能够与多个工作流持久性数据库(每个客户一个)对话的工作流实例。

对于#1,我们主要关心的是随着单个数据库负载增加时的性能。对于 #2,关注的是 Web 应用程序的可扩展性,因为为 1000 个客户提供 1000 个 Web 应用程序似乎并不合适。

这给我们留下了选项 #3,我们认为这是正确的方法。但是,我们不确定这是否可以在 Windows Workflow 中完成。

所以问题是,能否以某种方式配置或编程 Windows Workflow Web 应用程序的单个实例以与多个 SQL 持久性数据库通信?如果是,我们怎样才能做到这一点?

谢谢!

【问题讨论】:

    标签: .net iis cloud workflow-foundation workflow-foundation-4.5


    【解决方案1】:

    我自己从不这样做,但我认为您可以通过实现自己的PersistenceService 来做到这一点。为此,请从 WorkflowPersistenceService 抽象类派生,该类具有 SaveWorkflowInstanceState/LoadWorkflowInstanceState 之类的方法。

    在这种方法中,您可以访问工作流的WorkflowInstanceId 属性。我认为你可以使用这个属性来决定在哪里存储这个特定的工作流实例。为了能够从适当的数据库加载(恢复)工作流,您需要实现一些映射,如下所示:WorkflowInstanceId:DatabaseId

    【讨论】:

    • 谢谢。这是一个有趣的想法。我会对此进行更多研究。
    猜你喜欢
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2013-11-14
    • 1970-01-01
    相关资源
    最近更新 更多