Workflow 4.0是个全新的框架,重写了3.0/3.5中的的Runtime和Activity。在Workflow 4.0的Runtime和3.0/3.5中的Runtime的最大区别在于没有了WorkflowRuntime对应的类。

在3.0/3.5中,我们需要先初始化WorkflowRuntime,并通过CreateInstance函数来建立工作流实例(WorkflowInstance)。4.0中的WorkflowApplication类和WorkflowInstance类对应,但是不需要通过WorkflowRuntime来实例化,可以通过new来实例化。

虽然WorkflowApplication和WorkflowInstance的对应,但是他们的构造方法也存在区别。3.0/3.5中我们通过传入一个System.Type类,由WorkflowRuntime来负责进行模板的实例化。而在4.0中我们是传入一个System.Activities.Activity实例来建立工作流实例。

除此之外,4.0中还提供提供了一种调用Workflow的快速通道WorkflowInvoker。可以直接通过调用静态方法Invoke来执行一个工作流。

Workflow 4.0另一个重大的特点在于WCF和Workflow的密切结合。和3.5一样,4.0中存在一个用于管理Workflow服务的类System.ServiceModel.Activities.WorkflowServiceHost。需要注意的是这个类存在于System.ServiceModel.Activities.dll中。他和System.WorkflowService.dll (.NET Framework 3.5)中的WorkflowServiceHost是完全不同的。

由此可见4.0中提供了3中不同的方式来管理/托管工作流实例。

WorkflowInvoker

可以像执行一个函数一样运行一个工作流。

优点:简单

缺点:在工作流执行过程中,如果和工作流实例进行数据交换

代码:

            WorkflowInvoker.Invoke(new Workflow1());

WorkflowApplication

可以控制工作流实例长时间运行,可以在运行过程中和实例进行数据交换。但是只能执行一个的工作流实例。

优点:

支持持久化,可以对实例进行控制,可以通过Bookmark来控制实例或交换数据。

应用例子:

使用工作流辅助建立一个向导的UI程序。

代码:

            WorkflowApplication instance = new WorkflowApplication(new Workflow1());

            instance.Completed = delegate(WorkflowApplicationCompletedEventArgs e)

            {

                Console.WriteLine("workflow completed, Id = " + instance.Id);

            };

            instance.Run();

            //....

            instance.ResumeBookmark("Submit", data);

WorkflowServiceHost

WorkflowServiceHost是一个最主要的工作流主机类。可以同时管理多个工作流实例,同时控制实例的激活等操作。支持WCF,和3.5相比有更强大的消息关联功能。当然WorkflowServiceHost也支持持久化(Persistence)和跟踪(Tracking)等功能。