Added functionality to work with correlated workflows

*Moved to: http://fluentbytes.com/added-functionality-to-work-with-correlated-workflows/

This evening I implemented the rudimentary way of doing workflow correlation in the WCFInputActivity

You can now create a workflow that has multiple WCFInputActivities and have the next calls correlated to the same workflow instance. The way it works is based on the use of a custom SOAP header you can add before you call the WCF service implementation.

To give you an idea how it works:

// Instantiate the generated proxy

wcfTest.WCFInputActivity_wcfContractImplClient client = new WCFTestClient.wcfTest.WCFInputActivity_wcfContractImplClient();

using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))

{

   Guid WorkflowID =

      client.EchoMessageSendToWorkflow("Hello workflow with WCF");

   // now do the call again and add a message header to corelate the workflow

   MessageHeader<Guid> mhg = new MessageHeader<Guid>(WorkflowID);

   MessageHeader untyped = mhg.GetUntypedHeader("WorkflowInstanceID",

                                                      "WCFInputActivity");

   OperationContext.Current.OutgoingMessageHeaders.Add(untyped);

   string msg = client.GetOriginalMessageBackFromWorkflow();

   MessageBox.Show(msg);

   client.Close();

}

On the server side I now implemented the method to get the instance from the header

Guid workflowInstanceID = OperationContext.Current.IncomingMessageHeaders.GetHeader<Guid>("WorkflowInstanceID", "WCFInputActivity");

return workflowRuntime.GetWorkflow(workflowInstanceID);

For future extension it is now possible to add a custom behavior that injects the custom header based on e.g. a database lookup in your tracking store or some other mechanism to retrieve the workflowID based on input parameters.

During this work I ran into some subtle bugs regarding handling parameter less methods as well, so that is fixed right away. The test workflow I use now looks as follows:

After a few more little things I will create a 0.5 release, so you don’t have to download the changesets separately anymore. Hope I have enough time to do this before the end of the week.

Go to codeplex and get the latest change sets I just checked in. (http://www.codeplex.com/WCFWorkflow/SourceControl/DownloadSourceCode.aspx?changeSetId=286)

Follow my new blog on http://fluentbytes.com