Dino Esposito的文章
Getting Started with Microsoft Windows Workflow Foundation: A Developer Walkthrough
介绍了目前在Visual Studio 2005中创建WWF的五种项目
- Sequential Workflow Console Application
- Sequential Workflow Library
- Workflow Activity Library
- State Machine Console Application
- State Machine Workflow Library
- Empty Workflow
Sequential Workflow Console Application--建立一个顺序的工作流应用
Sequential Workflow Library --建立一个顺序的工作流库项目
Workflow Activity Library --建立一个工作流节点/步骤库项目
两者的区别,Sequential Workflow Console Application编译之后,会将工作流应用Hosting在一个控制台程序中,Sequential Workflow Library则创建一个工作流的库,这个库没有设置Hosting,所以运行时必须设置Hosting或是将它作为工作流的一部分,加入到一个Sequential Workflow Console Application中,而Workflow Activity Library 项目基本上可以看作是创作一个Activity,它可以理解成WinForm中的一个控件,一般都是为了加入到Sequential Workflow Console Application和State Machine Console Application的应用中,也可以加入到Sequential Workflow Library和State Machine Workflow Library的项目中,作为一部分进行重用或组合
应用WWF开发一个工作流的应用,一般进行下面的步骤:
1. 使用工作流设计器设计其工作流的模型和行为--你可以看作是产生一个Activity
2. 使用工作流设计器或代码组合(Compose)多个Activity,并且设置相应的属性。
3. 将工作流Hosting在一个控制台程序中,当然也可以Hosting在Windows Services,WinForm或IIS等等的应用程序中
4. 工作流引擎启动,实例化你之前创作的工作流
5. 将业务数据送入工作流,或从工作流中获得状态的数据,进行流程状态跟踪的处理和展现
如果理解了上面的,那么就非常容易两类关于状态机的工作流项目类型了
State Machine Console Application--创建一个状态机的工作流应用,设置了Hosting
State Machine Workflow Library--创建一个状态机的工作流项目,没有设置Hosting,可以作为一个组件
Sequential(时序) 和State Machine(状态机)是WWF提供的最主要的两种工作流类型,也是目前应用比较广泛的工作类型。WWF还提供一种基于Role-Based(基于角色)的工作流,由于Role-Based主要是面向控制鉴权、用户角色和业务规则,所以它可以单独存在(这时表现和Biztalk HWS非常相似),也可以迁入到Sequential和State Machine两种工作流中,进行组合和变化
所以State Machine Console Application和State Machine Workflow Library的区别也是非常显而易见的。
而Empty Workflow 则只提供了一个项目文件和WWF需要的相关引用,可以有用户决定加入上述五种不同的项目或是成为这五种项目的一种,因为WWF SDK也支持不使用工作流设计器完全用代码的方式来构建和运行WWF应用。
简单来看,我们可以使用Visual Studio WWF的扩展创作整个工作流(其实是组合、排列和设置Activity的关系网),Activity则可以理解成我们经常说的工作流中某一步,子流程,里面包含了流程、状态、规则、某个状态下的行为(Actions)以及它们之间的关系。而多个Activity的组合或排列就构成了WWF的工作流(Workflow),所以使用和理解Activity的概念非常重要的
从整个的架构上,WWF支持面向人(Human)和系统(System)的两种工作流模式,并且努力将它放到一个工作流模型(One Model)中。
从风格上看:
Sequential 型的比较传统,带有明显的时序性,适用于大多数结构化的工作流应用
Role-Based 型用于比较灵活,数据驱动的,面向多种业务规则的某个专门领域的工作流
State Machine型也非常灵活,属于事件驱动,带有事务特征,适合于非结构化面向人或角色相关的工作流场景
同样基于上述的风格很容易进行组合或创建出新的风格。
通俗理解的描述(当然是我的理解),你可以发现创作工作流的过程,实际是产生一个xoml的工作流描述语言,之后它会被编译成一个.NET Assembly,它包含的工作流的元数据和相关的设置、属性和代码。之后你配置Hosting(其实是配置工作流主机的通信协议、线程、事务、时钟和数据/状态序列化方式),然后在Hosting中运行和启动WWF工作流引擎,工作流引擎再加载带有工作流元数据和代码的.NET Assembly,这些Assembly被工作流引擎按计划或步骤地执行;工作流引擎负责每个工作流实例的生命周期,多个工作流的执行、调度、状态跟踪、解析规则引擎,而我们的应用程序则处理输入和输出数据、状态的展现,编写每个步骤中对于数据的处理。
所以WWF提供了一个工作流应用和平台的基本功能和服务,比如它目前就不关心像Biztalk Server那样做集群、配置高可用性,这就如同之前我们使用SQL Report Services一样,RS并不关心最后报表打印的技术问题。WWF也一样,它提供了一个平台、提供了一个Framework和相关的开发工具。它非常明显的特征和服务使它和WPF,WCF一起成为Microsoft WinFX中非常重要的三大基础服务之一。