Loading XAML Workflows in WF4

Note: This blog post is written using the .NET framework 4.0 RC 1

 

Most of the time I used compiled workflows in Windows Workflow Foundation 4. Its nice and easy, you design the workflow, compile it and at runtime there is a .NET type you use to create and run workflows. The main drawback is that this approach isn’t very flexible, sometimes you want to be able to change your workflow definition at runtime or store it in a database so recompiling isn’t an option.

Fortunately we can also load a workflow from the XAML file itself and execute the resulting workflow activity. This is done using the ActivityXamlServices class that will let us load the XAML file and return an activity, to be exact it returns a DynamicActivity as a wrapper around your definition.

The simplest option is just to call Load() passing in the file name like this:

Activity workflow = ActivityXamlServices.Load("YourWorkflow.xaml");

 

If you are using activities, or other types, from the local assembly this is going to fail though and you need a slightly more verbose way of doing thing like this:

var settings = new XamlXmlReaderSettings()


{


    LocalAssembly = typeof(SendForManualApproval).Assembly


};


var reader = new XamlXmlReader("YourWorkflow.xaml", settings);


Activity workflow = ActivityXamlServices.Load(reader);





 



We need to use the XamlXmlReaderSettings to indicate what the local assembly reference in the XAML is.



 



Enjoy!



[f1]
[f2]

One thought on “Loading XAML Workflows in WF4

  1. Have you thought about load xaml workflows in AppFabric?
    I’m thinking in load wcf services from a xamlx repository(like a database), using AppFabric as the host of these services.

    Regards

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>