Search code examples
workflow-foundationworkflow-foundation-4

Loading persisted workflow after workflowdefinition has changed in WF4


How to solve this problem (in WF4):

I create a workflow in xaml and start several instances of it, I have a persistancestore and all workflows persist on a bookmark half way their workflow.

Now I stop the application

If I restart te application everything is resumed, en nicely completes.

But what if I want to change the workflow definition after the running instances persist? the only way to load the running workflows (that I was able to find) is the following way:

        WorkflowApplication wfapp = new WorkflowApplication(new WorkflowDefinition());
        wfapp.InstanceStore = new SqlWorkflowInstanceStore(connStr);

        wfapp.Load(wfGuid);

So you need the workflow definition, if it has changed during the persistance, things go horribly wrong.

What is the best way to solve this?


Solution

  • This scenario is a bit of a problem. There is no way to migrate am older workflow definition to the new format. I have done some limited testing and some scenarios with adding/deleting activities that where not yet executing worked fine. But then I also has scenarios go badly wrong, including re executing an already finished activity.

    As far as I am aware there is no good way to solve the problem other than tracking the version of the XAML/assembly used to create the workflow and checking that when you want to restart a workflow to determine the workflow version to use.