我们基于我们的自定义框架(仅扩展ASP.NET)运行多个ASP.NET应用程序(每个客户一个)。每个Web应用程序都使用自己的数据库(连接字符串中的初始目录)。现在我们想要为应用程序添加工作流功能(分别对我们的框架)。对于所有应用程序,特定工作流程将是相同的,只有每个工作流程的一些初始设置可以变化,例如,在一个应用程序中,电子邮件将发送给用户X,但在其他应用程序中发送给用户Y.
问题是我们是否可以安装一个工作流引擎(一个数据库用于持久性),并为所有Web应用程序中的所有工作流共享此内容。
如果是这样,工作流引擎如何知道特定工作流属于哪个Web应用程序?我们应该在工作流程中的某处存储一些应用程序标识符吗?
感谢您的建议!
答案 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();
然后,您可以在工作流程中跟踪哪个应用已实例化它...