代码改变世界

Windows Workflow Foundation - [Workflow Runtime]

2008-01-08 17:55  Tam  阅读(733)  评论(0编辑  收藏  举报
Workflow Runtime

 

从图上可以看到,WorkflowRuntime可以看作是应用程序和Workflow实例之间的一个通道,它托管在进程里面,因此使得工作流和托管它的应用程序打交道变得容易。在WorkflowRuntime里面,我们可以加载不同的服务,包括跟踪服务,持久化服务等等,甚至我们能根据不同需求编写自己的服务。

WorkflowRuntime位于System.Workflow.Runtime.WorkflowRuntime名称空间下,该类主要职责为以下4点:

1.       管理Workflow运行时

2.       启动和管理工作流实例

3.       管理运行时的服务

4.       处理 运行时的事件


如何创建WorkflowRuntime?
    在每个AppDomain上只能有一个WorkflowRuntime实例,因此,我们使用Singleton
模式来建造这个类。


 1public static class WorkflowFactory
 2{
 3        private static WorkflowRuntime _workflowRuntime = null;
 4        private static object _syncObj = new object();
 5
 6        public static WorkflowRuntime GetWorkflowRuntime()
 7        {
 8            lock (_syncObj)
 9            {
10                if (_workflowRuntime == null)
11                {
12                    _workflowRuntime = new WorkflowRuntime();
13                }

14                return _workflowRuntime;
15            }

16        }

17}

18

 

当类实例化之后,我们可以通过workflowRuntime.AddService()方法把许多不同的服务加载到WorkflowRuntime里(如何添加需要的服务将在后面详细说明)

下面列出WorkflowRuntime一些常用的事件:

事件名

注释

Started

Workflow Runtime 开始时触发。

Stopped

Workflow Runtime 停止时触发。

WorkflowCompleted

当工作流实例完成时触发。

WorkflowIdled

当工作流实例进入空闲时触发(当实例变成空闲的时候,我们可以把该实例存放到数据库,然后从内存中卸载)。

WorkflowTerminated

当工作流实例终止时触发(触发该事件有两种情况,一是运行的时候我们调用了Terminate方法,另外一种情况是运行时发生了异常)。


订阅事件代码如下:

1workflowRuntime.Started += new EventHandler<WorkflowRuntimeEventArgs>(workflowRuntime_Started);
2workflowRuntime.Stopped += new EventHandler<WorkflowRuntimeEventArgs>(workflowRuntime_Stopped);
3                workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) { waitHandle.Set(); };
4                workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
5{
6   Console.WriteLine(e.Exception.Message);
7   waitHandle.Set();
8}
;
9

 1static void workflowRuntime_Stopped(object sender, WorkflowRuntimeEventArgs e)
 2{
 3   Console.WriteLine("Workflow Runtime Is Started");
 4}

 5
 6static void workflowRuntime_Started(object sender, WorkflowRuntimeEventArgs e)
 7{
 8   Console.WriteLine("Workflow Runtime Is Stopped");
 9}

10

最后,我们再看一看下图重温一下host,workflowruntime,workflowInstance的关系
Host, WorkflowRuntime, WorkflowInstance

参考:MSDN, 《Workflow Foundation Step By Step》