WEB开发网
开发学院软件开发C语言 学WF系列(三) 阅读

学WF系列(三)

 2010-10-01 08:24:42 来源:WEB开发网   
核心提示:1. 写在前面原本计划从这篇文章开始,开始介绍活动的使用方式,学WF系列(三),但是考虑到很多在WF中,重要的类和概念都没有清晰,持久化点常常发生在以下时刻:<1> 在工作流实例完成或终止前<2> 在工作流实例编程空闲之后<3> 在工作流实例被显式地卸载后<4> 当具有P

1. 写在前面

原本计划从这篇文章开始,开始介绍活动的使用方式,但是考虑到很多在WF中,重要的类和概念都没有清晰,所以还是在本文中继续明确一下WF中重要的类的用法。

这节是纯粹的理论知识,只是为你的后续学习打下一个基础,如果您不敢兴趣,可以略过。

2. WorkflowRuntime类

WorkflowRuntime:工作流运行时。

这个类有四个作用:

<1> 管理工作流运行时

<2> 启动和管理工作流实例

<3> 管理运行时服务

<4> 处理运行时事件

A . 管理工作流运行时

管理工作流运行时,涉及到两个重要的方法:StartRuntime和StopRuntime。

StartRuntime:这个方法启动工作流运行时引擎和工作流运行时引擎服务,当StartRuntime被调用时,会首先检查运行时核心服务是否被添加到运行时中。核心服务即指:派生自WorkflowCommitWorkBatchService(工作流事务服务)和WorkflowSchedulerService(工作流调度服务)的计划程序服务。如果哪一个缺失,那么运行时就会为每一个服务创建一个默认的服务,即:DefaultWorkflowCommitWorkBatchService服务和DefaultWorkflowSchedulerService服务,然后将他们加载到运行时服务,之后通过服务的Start方法启动服务,并将IsStart属性设置为true,并且触发Started事件。

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

首先需要的是创建一个工作流实例,我们常用的是使用工作流运行时实例下的Create(type)方法来创建工作流实例。

然后用这个工作流实例的Start方法,启动自身。

这个时候,如果工作流运行时未开启,也就是尚未调用WorkflowRuntime的Start方法,那么这时会自动地去调用Start开启工作流运行时。

C. 管理运行时服务

WorkflowRuntimeService类:这个类是工作流运行时引擎核心服务的抽象基类。我们把他叫做运行时服务。这些服务运行在工作流运行时的环境下,对用户不可见。例如我们之前提到的WorkflowSchedulerService,WorkflowCommitWorkBatchService服务都是派生自WorkflowRuntimeService类。

学WF系列(三)

图片看不清楚?请点击这里查看原图(大图)。

从WorkflowRuntimeService派生的服务都可以由工作流运行引擎启动或停止。

我们可以向运行时服务增加或者删除服务,对应的方法为AddService()和RemoveService()。

当然,我们也可以获得某一个工作流运行时下的所有服务:对应方法为GetService()和GetAllServices()方法。

另外,我们可以去根据某一个运行时服务的State属性去获得该运行时服务的运行状况。

D. 处理运行时事件

其中包括工作流运行时的事件和工作流实例相关的事件。

例如:

WorkflowRuntime的Started,Stopped事件

WorkflowInstance的WorkflowStarted,WorkflowStopped事件。

3. WorkflowInstance类

WorkflowInstance:表示一个工作流实例。

他本质上是工作流运行时引擎所使用的实际工作流的代理。通过包含在WorkflowInstance类里的方法,宿主程序可以指示工作流运行引擎在工作流实例上进行操作。

我们也可以把他看成我们一个工作流类定义的外包装。

4. 持久化点

我们知道,工作流其中有一个特点是持久性。

也就是说,比如我们有一个审批流,你不能因为服务器中间突然断电,而让整个审批流的状态丢失。

所以说,我们需要一个可以持久化的介质来持久化我们的工作流。这个持久化介质比较常用的就是数据库。

当然,我们在这里并不是讨论持久化介质,而是讨论持久化点。什么是持久化点,也就是说我们的工作流不能每进行一步,我们就去将他持久化一次,这样浪费资源和效率。所以我们会在持久化点将当前的工作流实例持久化。

在生命周期中,持久化点常常发生在以下时刻:

<1> 在工作流实例完成或终止前

<2> 在工作流实例编程空闲之后

<3> 在工作流实例被显式地卸载后

<4> 当具有PersistOnClose特性的活动完成后(PersistOnCloseAttribute:当经过装饰的活动完成之后,必须持久化当前工作流实例)

并且,持久化服务对于终端用户是不可见的。

系列文章:

学WF系列(一)——Hello world开始

学WF系列(二)——工作流与Visual Studio

Tags:WF 系列

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接