What to pass parameters to start an workflow through WCF

Posted by Rubens Farias on Stack Overflow See other posts from Stack Overflow or by Rubens Farias
Published on 2010-03-26T03:36:54Z Indexed on 2010/03/26 3:43 UTC
Read the original article Hit count: 205

Filed under:
|
|

It's possible to define some start values to an workflow using WorkflowInstance.CreateWorkflow, like this:

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

This way, a MyStateMachineWorkflow instance is created and First and Second public properties gets that dictionary values.

But I'm using WCF; so far, I managed to create a Start method which accepts that two arguments and I set that required fields by using bind on my 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);
}

While this works, that create an anomaly: that method should be called only and exactly once.

How can I start an workflow instance through WCF passing those arguments? On my tests, I just actually interact with my workflow through wire after I call that proxy method. Is there other way?

© Stack Overflow or respective owner

Related posts about workflow-foundation

Related posts about wcf