Windows Workflow Foundation - [Workflow Runtime]
2008-01-08 17:55 Tam 阅读(733) 评论(0) 编辑 收藏 举报从图上可以看到,WorkflowRuntime可以看作是应用程序和Workflow实例之间的一个通道,它托管在进程里面,因此使得工作流和托管它的应用程序打交道变得容易。在WorkflowRuntime里面,我们可以加载不同的服务,包括跟踪服务,持久化服务等等,甚至我们能根据不同需求编写自己的服务。
WorkflowRuntime位于System.Workflow.Runtime.WorkflowRuntime名称空间下,该类主要职责为以下4点:
1. 管理Workflow运行时
2. 启动和管理工作流实例
3. 管理运行时的服务
4. 处理 运行时的事件
如何创建WorkflowRuntime?
在每个AppDomain上只能有一个WorkflowRuntime实例,因此,我们使用Singleton模式来建造这个类。
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方法,另外一种情况是运行时发生了异常)。 |
订阅事件代码如下:
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
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的关系
参考:MSDN, 《Workflow Foundation Step By Step》