可以将单个Windows Workflow实例配置为使用多个数据库吗?

时间:2014-07-19 00:39:45

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

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

关于此云迁移,我们对我们为ASP.Net(非Windows Workflow)应用程序做出的以下决定有点信心:

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

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

  1. 使用单实例/单一数据库方法。在这种方法中,我们将拥有一个工作流实例,一个工作流数据库模式可以为多个客户提供服务。
  2. 使用多实例/多数据库方法。在这种方法中,我们将为每个客户提供单独的IIS应用程序以及单独的数据库架构。
  3. 使用单实例/多数据库方法。在这种方法中,我们将拥有一个能够与多个工作流持久性数据库(每个客户一个)交谈的工作流实例。
  4. 对于#1,我们主要关注这个单一数据库上的负载增加时的性能。对于#2,关注的是Web应用程序的可伸缩性,因为1000个客户拥有1000个Web应用程序似乎并不正确。

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

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

    谢谢!

1 个答案:

答案 0 :(得分:0)

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

在此方法中,您可以访问工作流程的WorkflowInstanceId属性。我认为您可以使用此属性来决定存储此特定工作流实例的位置。为了能够从适当的数据库加载(恢复)工作流,您需要实现这样的映射:WorkflowInstanceIdDatabaseId