艾伟:一步一步学WF系列(三)

  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类。

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

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

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

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

  D. 处理运行时事件

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

  例如:

  WorkflowRuntime的Started,Stopped事件

  WorkflowInstance的WorkflowStarted,WorkflowStopped事件。

  3. WorkflowInstance类

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

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

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

  4. 持久化点

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

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

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

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

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

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

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

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

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

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

 

时间: 2024-09-01 11:35:54

艾伟:一步一步学WF系列(三)的相关文章

一步一步学WF系列(三)

1. 写在前面 原本计划从这篇文章开始,开始介绍活动的使用方式,但是考虑到很多在WF中,重要的类和概念都没有清晰,所以还是在本文中继续明确一下WF中重要的类的用法. 这节是纯粹的理论知识,只是为你的后续学习打下一个基础,如果您不敢兴趣,可以略过. 2. WorkflowRuntime类 WorkflowRuntime:工作流运行时. 这个类有四个作用: <1> 管理工作流运行时 <2> 启动和管理工作流实例 <3> 管理运行时服务 <4> 处理运行时事件 A

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

1. 什么是工作流 我给工作流下了这样的定义,工作流就是一个过程,这个过程会产生一定的结果. 其实,在OA系统中,审批流就是我们最常见的工作流之一. 另外,简单了说,其实我们所画的流程图就是一种最简单的工作流,工作流最大的特点就是图形化.工作流是按照顺序驱动或者事件驱动去触发下一步操作,从而最终得到一个结果. 其实,我们也可以把他理解为一个过程化的职责链. 2. 工作流的类型 工作流大致分为两类,顺序工作流和事件驱动工作流. 顺序工作流是我们很常见的工作流,这个工作流是由我们事先规定好的顺序一步

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

1. 工作流的开发风格 在WF中,有三种开发工作流的方式. <1> Markup-only <2> Code-and-MarkUp <3> Code-only 在这里,我就不想再去花时间去举例子,我们长话短说. 工作流的布局方式是XAML格式,相信了解WPF和Sivlerlight的人对这点都比较清楚.其实这个和WF是一样的.这个就是所谓的Markup-only模式. 而另一个极端是Code-only.我们还是去想WPF中的例子,如果WPF不熟悉我们去想想Winform

一步一步学WF系列(四)工作流模拟登陆

1. 摘要 我们之前已经熟悉了关于WF的基本概念,相信各位也都跃跃欲试.想步入真正的WF开发. 从本文开始,我们就先来熟悉在WF中的活动. 2. 活动 WF的核心就是一系列的活动. 而工作流就是多个活动通过某种控制模组合起来形成一个连续有序的,通过工作流引擎并且根据业务需要自定义和自流转的系统. 通过以上的两个定义,相信我们都应该了解活动之于工作流意味着什么. 3. CodeActivity Code控件是我们在WF中算是使用率最高的控件了.用户通过Code控件执行完成某项功能. Code控件常

一步一步学Silverlight :使用样式封装控件观感

概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON.Web Service.WCF以及Sockets的支持等一系列新的特性.<一步一步学Silverlight 2系列>文章带您快速进入Silverlight 2开发. 本文为系列文章第八篇,主要介绍在Silverlight中使用Style元素封装控件观感 Silv

一步一步学Silverlight :在Silverlight中如何用JavaScript调用.NET代码

概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON.Web Service.WCF以及Sockets的支持等一系列新的特性.<一步一步学Silverlight 2系列>文章将从Silverlight 2基础知识.数据与通信.自定义控件.动画.图形图像等几个方面带您快速进入Silverlight 2开发. Silv

一步一步学Silverlight :基本控件

概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON.Web Service.WCF以及Sockets的支持等一系列新的特性.<一步一步学Silverlight 2系列>文章带您快速进入Silverlight 2开发. 本文为系列文章第二篇学习几个基本的控件. 在Silverlight 2中,提供了大量的控件,包括

一步一步学Silverlight :数据与通信之WebClient

概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON.Web Service.WCF以及Sockets的支持等一系列新的特性.<一步一步学Silverlight 2系列>文章带您快速进入Silverlight 2开发. 本文将介绍如何在Silverlight 2中使用Web Client进行通信. 简单示例 编写一

一步一步学Silverlight :使用控件模板

概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON.Web Service.WCF以及Sockets的支持等一系列新的特性.<一步一步学Silverlight 2系列>文章带您快速进入Silverlight 2开发. 本文为系列文章第九篇,主要介绍如何使用控件模板定制控件的观感.Silverlight提供了极其强