Как передать параметры запуска в рабочий процесс через WCF - PullRequest
1 голос
/ 26 марта 2010

Можно определить некоторые начальные значения для рабочего процесса, используя WorkflowInstance.CreateWorkflow, например:

using(WorkflowRuntime runtime = new WorkflowRuntime())
{
    Dictionary<string, object> parameters = new Dictionary<string, object>();
    parameters.Add("First", "something");
    parameters.Add("Second", 42);

    WorkflowInstance instance = 
        runtime.CreateWorkflow(typeof(MyStateMachineWorkflow), parameters);
    instance.Start();
    waitHandle.WaitOne();
}

Таким образом, создается экземпляр MyStateMachineWorkflow, а публичные свойства First и Second получают значения этого словаря.

Но я использую WCF; до сих пор мне удалось создать метод Start, который принимает эти два аргумента, и я установил обязательные поля, используя bind на моем ReceiveActivity:

using (WorkflowServiceHost host = 
    new WorkflowServiceHost(typeof(MyStateMachineWorkflow)))
{
    host.Open();

    ChannelFactory<IMyStateMachineWorkflow> factory = 
        new ChannelFactory<IMyStateMachineWorkflow>("MyStateMachineWorkflow");
    IMyStateMachineWorkflow proxy = factory.CreateChannel();

    // set this values through binding on my ReceiveActivity
    proxy.Start("something", 42);
}

Хотя это работает, это создает аномалию: этот метод должен вызываться только и ровно один раз.

Как я могу запустить экземпляр рабочего процесса через WCF, передавая эти аргументы? На моих тестах я просто на самом деле взаимодействую с моим рабочим процессом через провод после вызова этого прокси-метода. Есть ли другой способ?

1 Ответ

1 голос
/ 26 марта 2010

Вы вроде бы ответили на свой вопрос о том, как передать параметры для запуска рабочего процесса. Единственный вопрос, который, кажется, остается здесь: «Как мне убедиться, что люди звонят в« Пуск »первым и только один раз?». Правильно?

Убедиться в том, что он вызывается первым, можно, установив свойство IsInitiating для атрибута OperationContractAttribute для Start в значение true, а все другие методы в false. Теперь, это не остановит повторный вызов метода, но я думаю, что это должно быть обработано тем фактом, что вы не можете перейти в это состояние в рабочем процессе, если вы правильно спроектировали конечный автомат, чтобы WCF / WF интеграция должна создать для вас какое-то исключение.

Есть хорошая статья о том, как использовать WCF с рабочими процессами здесь, на MSDN , которую вам, вероятно, стоит проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...