从这里开始认识 MS Workflow Foundation(即 WF)

最近正在学习WF,收集了一些资料,再此也提供出来供有兴趣的朋友参考。

1.系统必备

—我们需要安装 WinFX下载)和 Visual Studio 2005 extensions for .NET Framework 3.0 (Windows Workflow Foundation)。这是我们必备的开发组件。

—WF作为net3.0的一部分发布,要运行需要安装net3.0

—WF提供了一个在VS2005中可视化设计工作流的设计器,Visual Studio 2005 Extensions for Windows Workflow Foundation,只有安装后才能在VS2005中建立WF项目。

2.WF是什么?
—WF本身并不是一个业务平台,它只是为开发人员提供创建工作流软件的一个平台,也就是说WF不是工作流应用平台,而是一个开发工作流应用的平台。

—MS将WF作为Vista的一个基本API发布,而不是一个独立的软件(如BizTalk,Office)。

3.WF适合做什么?

—使用WF可以开发具有以下特点的工作流平台:

1.业务流程辅助办公软件
2.软件内部工作的顺序控制
3.自动筛选查询类系统
4.自动化控制中

4.WF的工作模式

—WF提供了两类工作流模式,流模式(Sequential)与状态机模式(State Machine ):

—顺序工作流 非常适合以下类型的操作,即该操作由依次执行直至最后一个活动完成的步骤的管线表示。但是,顺序工作流的执行并非完全是顺序的。它们仍然可以接收外部事件或者启动并行任务,在这种情况下,确切的执行顺序可能有所不同。

—状态机工作流 由一组状态、转换和操作组成。首先,将一个状态表示为起始状态,然后,基于事件执行向另一个状态的转换。状态机工作流可以具有确定工作流结束的最终状态。

—可以简单的将状态机模式看成是有交互点与Goto指令的流模式。设计工作流,其实没有什么应该的模式,用状态机模式作主流程,管理业务状态,流模式作子流程,完成具体的业务操作是一个不错的方案。

5.工作流活动的分类
—WF为工作流设计提供了一系列的Activity控件,从型式上分为两类:
简单活动类:(System.Workflow.ComponentModel.Activity)
活动容器类:(System.Workflow.ComponentModel.CompositeActivity)
Activity <- CompositeActivity
—包括以下具体控件:
CodeActivity:可以添加代码,
IfElseActivity:类似于if语句,
SuspendActivity:类似于线程挂起语句,
DelayActivity:类似于线程休眠语句 ,
CallExternalMethodActivity:类似于调用方法语句,
HandleExternalEventActivity:类似于触发事件语句,
WhileActivity:类似于While语句,
terminateActivity: 类似于终止语句,
ThrowActivity:类似于自定义异常语句,
ConditionedActivityGroup:有点像foreach语句,
replicatorActivity:有点像for语句
PolicyActivity:有点像职责链
— 可以用InvokeWebServiceActivity调用WebService
—可以用WebServiceInputActivity ,WebServiceOutputActivity 将工作流发布成WebService

—可以用InvokeWorkflowActivity调用子流程
还有一些用于控制流程、控制状态、事务处理、异常处理的控件

6.工作流模版和实例
—WF的工作流模板可以是一个编译成DLL的NET类库文件,也可以是一个用XML描绘结点关系的字符串,工作流实例是每个用户依据模板定义的轨道实现具体业务的一组状态数据,实例要在引擎中运行,实例可以保存到数据库或磁盘文件中。

—工作流提供了一个运行实例的引擎,引擎不是以一个独立服务的方式发布的,而是可以独立线程的方式寄生在任意进程中。被寄生的程序叫宿主,宿主与引擎可以通过接口进行交互,控制引擎以及与引擎中的工作流实例通信。引擎中可以同时运行多个实例,宿主中可以同时运行多个引擎。

7. WF提供了的服务
—1.持久化服务
WF提供了SqlWorkflowPersistenceService,用于将实例持久化到一数据库中,SqlWorkflowPersistenceService的数据库生成文件在[系统盘\Windows\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\EN]下SqlPersistenceService_Schema.sql与SqlPersistenceService_Logic.sql

—也可派生PersistenceService,建立自定义持久化服务
—2.监听(跟踪)服务
WF提供了SqlTrackingService,用于监听实例的运行状态,并将状态保存到数据中,SqlTrackingService的数据库生成文件在[系统盘\Windows\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\EN]下Tracking_Schema.sql与Tracking_Logic.sql使用SqlTrackingQuery,可以从数据库中查询实例的状态。

—也可派生TrackingService,建立自定义监听服务对要监听的内容,可以自定义 TrackingProfile,进行筛选

—3.数据通信服务
WF提供了ExternalDataExchangeService,用于实现宿主与实例的通信,CallExternalMethodActivity与HandleExternalEventActivity依赖于该服务。

—4.还有其他一些服务,如ManualWorkflowSchedulerService,以单程方式运行实例,在实例有与外部设备交互时非常有用.

8. WF高级特性

—1.可以自定义流程设计器
WF提供了System.Workflow.ComponentModel.Design.WorkflowView控件,该控件可以用图形的方式显示工作流结构。

—2.可以用WorkflowChanges在实例运行时使用,动态添加删除结点。

—3.可以用WorkflowMarkupSerializer将工作流模板类转换为XML字串格式

—4.WF为流程控制类Activity提供了规则对象。

—5.WF提供了WorkflowRole对象,可以自定义角色,使用AD角色、使用ASP.NET2.0角色。

9.关于通信

—很多人有一个习惯就是从引擎中得到实例,然后直接操作,这个方式是单线程开发中常用的,不用考虑资源访问冲突,但在WF中实例与宿主、引擎的关系,就像操作多线程资源一样,实例被引擎线程专控,宿主要与实例通信不能直接进行,要通过一个专用通道。

—1.可以使用启动参数,动态结点,插入队列的方式实现宿主与引擎中的实例推方式通信;

—2.也可以在设计时使用CallExternalMethodActivity,HandleExternalEventActivity,或自定义状态点的方式实现宿主与引擎中的实例拉模式的通信。

10.参考(非常值得一看)


你可能感兴趣的:(workflow)