Можно определить некоторые начальные значения для рабочего процесса, используя 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, передавая эти аргументы? На моих тестах я просто на самом деле взаимодействую с моим рабочим процессом через провод после вызова этого прокси-метода. Есть ли другой способ?