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

简介:   1. 写在前面  原本计划从这篇文章开始,开始介绍活动的使用方式,但是考虑到很多在WF中,重要的类和概念都没有清晰,所以还是在本文中继续明确一下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类。

image

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

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

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

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

  D. 处理运行时事件

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

  例如:

  WorkflowRuntime的Started,Stopped事件

  WorkflowInstance的WorkflowStarted,WorkflowStopped事件。

  3. WorkflowInstance类

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

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

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

  4. 持久化点

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

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

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

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

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

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

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

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

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

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

 

目录
相关文章
|
C#
艾伟:一步一步学WF系列(二)工作流与Visual Studio
1. 工作流的开发风格    在WF中,有三种开发工作流的方式。    Markup-only    Code-and-MarkUp    Code-only    在这里,我就不想再去花时间去举例子,我们长话短说。
957 0
|
安全 网络协议 Windows
艾伟_转载:WCF安全之EndPointIdentity
   最近在做一个项目,应用了WCF进行分布式开发,中间还涉及到消息路由器等,好在有WCF提供了强大的基础支持,当然,本身也作了不少的扩展,实际,我 最关心的是WCF的安全问题,网上不少朋友介绍的WCF的安全也是少得可怜,微软发布的WCF Security GUID好像讲得也只是入门级别的教程,离真...
1082 0
|
安全 网络协议 Windows
艾伟:WCF安全之EndPointIdentity
   最近在做一个项目,应用了WCF进行分布式开发,中间还涉及到消息路由器等,好在有WCF提供了强大的基础支持,当然,本身也作了不少的扩展,实际,我 最关心的是WCF的安全问题,网上不少朋友介绍的WCF的安全也是少得可怜,微软发布的WCF Security GUID好像讲得也只是入门级别的教程,离真...
1110 0
|
索引
艾伟:WM有约(二):配置信息
Written by Allen Lee   添加配置文件 首先,向项目添加一个Options.xml文件,这个文件将会用来储存应用程序的配置信息: 图 1 接着,把Options.xml的Copy to Output Directory属性的值改为Copy if newer: 图 2 然后,就是为Options.
851 0
|
JavaScript 前端开发
艾伟:简单探照灯遮照效果的Silverlight程序
   最近做SonySource项目时实现了几个很小的Silverlight程序,分别是Clock、HomePeoplePicker和ManageMentPeoplePicker。实际上这三个silverlight程序都非常简单,主要特点有以下几个方面:   1.
1114 0
|
Windows
艾伟:WM有约(一):你好,CF
Written by Allen Lee   来,和CF打个招呼! 在这个系列里,我将会使用Visual Studio 2008来创建Windows Mobile 6 Professional应用程序,如果你也想在自己的计算机上体验一下,那么请先安装Visual Studio 2008和Windows Mobile 6 Professional SDK。
865 0
|
Web App开发 前端开发 .NET
艾伟:Chart Controls 简介与下载点
  虽然博客园已有人介绍过了,还是忍不住介绍一下微软这套免费又功能强大的图表控件「Microsoft Chart Controls for Microsoft .NET Framework 3.5」。本帖并提供相关软件、文件、官方示例的下载点。
939 0
艾伟:WM有约(三):下一次是什么时候?
Written by Allen Lee   不要留恋过去 怎样才能约束用户,不让其选择过去的日期呢?有一个很傻的办法,就是每次启动应用程序的时候,自动把MonthCalendar控件的MinDate属性的值设为今天。
919 0
|
.NET C# Python
艾伟:F4何去何从 --- 大视野观察Framework 4.0
Framework 4.0 CTP版发布一个多月了,在此期间稍有闲暇就打开来试试,尝试一下这个新东东。总体感觉微软现在技术大爆炸,一下子往F4里塞了好多东西,有的确实不错, 不过有的还是感觉有点粗糙,还经不起实战考验。
1097 0
艾伟:MSBuild 简解
  从最原始的编译器,逐渐到 Shell 命令组合、Make工具,到现在的针对性 Build 工具,Rake、Ant、MSBuild,甚至于 PowerShell 这样的工具;都为我们软件开发以及系统管理做出了贡献,我甚至不能想象几十年前使用编译器生成程序的复杂步骤(其实就是把 makefile 拆开,相当恐怖)。
1274 0