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

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

6
static 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》


浙公网安备 33010602011771号