Windows Workflow Foundation: несколько приложений - PullRequest
1 голос
/ 18 мая 2010

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

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

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

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

Ответы [ 2 ]

1 голос
/ 18 мая 2010

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

0 голосов
/ 18 мая 2010

Вы можете использовать одну постоянную базу данных, если ваши рабочие процессы могут повторно использоваться в приложениях.

Чтобы включить настраиваемое свойство в вашем рабочем процессе ... в 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();

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

...