1

我们正在运行基于我们的自定义框架(它只是扩展 ASP.NET)的几个 ASP.NET 应用程序(每个客户一个)。每个 Web 应用程序都使用自己的数据库(连接字符串中的初始目录)。现在我们想将工作流功能添加到应用程序(分别添加到我们的框架中)。所有应用程序的特定工作流程都是相同的,只是每个工作流程的一些初始设置可能会有所不同,例如,在一个应用程序中,电子邮件将发送给用户 X,但在其他应用程序中发送给用户 Y。

问题是我们是否可以安装一个工作流引擎(具有一个用于持久性的数据库)并为所有 Web 应用程序中的所有工作流共享它。

如果是这样,那么工作流引擎如何知道特定的工作流属于哪个 Web 应用程序?我们应该在工作流的某个地方存储一些应用程序标识符吗?

感谢您的建议!

4

2 回答 2

1

如果所有工作流都相同,您可以为每个客户使用单个 WorkflowServiceHost,并提供电子邮件地址等附加信息作为启动参数。但是,如果您认为要为不同的客户端调整工作流程,我将为每个特定客户端创建不同的主机。当然,您以后可以随时添加。

于 2010-05-18T16:59:51.947 回答
-1

如果您的工作流可以跨应用程序重用,您可以使用单个持久性数据库。

要在您的工作流程中启用自定义属性...AppId,您需要一个标有 ExternalDataExchangeAttribute 的本地通信接口。

定义您的自定义属性... AppId

[Serializable()]
public class MyWorkflowEventArgs : ExternalDataEventArgs
{

    private Guid _AppId;

...

然后,当您启动每个工作流程时,您可以通过字典传递您的自定义属性...

       System.Collections.Generic.Dictionary<String, Object> parameters = new System.Collections.Generic.Dictionary<String, Object>();

        Guid appId;

        StartWorkflowRuntime();

        //Define the parameters for the workflow
        parameters.Add("appId", appId);

        //  create the workflow instance
        WorkflowInstance workflowInstance;
        ManualWorkflowSchedulerService manualWorkflowSchedulerService;
        workflowInstance =
            (HttpContext.Current.Application[WorkflowRuntimeCacheKey] as WorkflowRuntime)
                .CreateWorkflow(workflowclass, parameters);     

        //  start the new workflowinstance
        workflowInstance.Start();

然后,您可以在您的工作流程中跟踪哪个应用程序实例化了它...

于 2010-05-18T17:22:44.177 回答