2010-05-18 17 views
1

Мы запускаем несколько приложений ASP.NET (по одному на каждого клиента) на основе нашей пользовательской инфраструктуры (которая просто расширяет ASP.NET). Каждое веб-приложение использует свою собственную базу данных (начальный каталог в терминах строки подключения). Теперь мы хотели бы добавить возможности рабочих процессов для приложений (в нашу структуру соответственно). Конкретные рабочие процессы будут одинаковыми для всех приложений, только некоторые начальные настройки каждого рабочего процесса могут различаться, например. в одном приложении электронная почта будет отправляться пользователю X, но в другом приложении пользователю Y.Windows Workflow Foundation: несколько приложений

Вопрос в том, можно ли установить один механизм документооборота (с одной базой данных для сохранения) и поделиться этим для всех рабочих процессов во всех веб-приложениях.

Если да, то каким образом механизм workflow get знает, какой конкретный рабочий процесс принадлежит веб-приложению? Должны ли мы хранить некоторый идентификатор приложения где-то в рабочем процессе?

Спасибо за предложения!

ответ

1

Если все рабочие процессы одинаковы, вы можете использовать один WorkflowServiceHost для каждого клиента и предоставить дополнительную информацию, такую ​​как адрес электронной почты, в качестве параметра запуска. Однако, если вы думаете, что собираетесь настраивать рабочие процессы для разных клиентов, я бы создал другой хост для каждого конкретного клиента. Конечно, вы всегда можете добавить это позже.

-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(); 

После этого вы можете отслеживать в своем рабочем процессе, какое приложение создало его ...

+2

Это материал WF3 и вопрос помечен WF4. – Maurice

Смежные вопросы