Windows Workflow Foundation:多个应用程序

时间:2010-05-18 07:55:58

标签: asp.net workflow-foundation-4

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

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

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

感谢您的建议!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:-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();

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