Windows Workflow Foundation: несколько приложений

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

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

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

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


person Petr Felzmann    schedule 18.05.2010    source источник


Ответы (2)


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

person Maurice    schedule 18.05.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();

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

person Konrad    schedule 18.05.2010
comment
Это материал WF3, и вопрос помечен как WF4. - person Maurice; 19.05.2010