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. 参考 ( 非常值得一看 )
— 入门简介: http://www.microsoft.com/china/MSDN/library/Windev/WindowsVista/WWFGetStart.mspx?mfr=true
— 性能描述: http://msdn2.microsoft.com/en-us/netframework/aa973808.aspx
— 业务方面: http://www.microsoft.com/china/MSDN/library/Windev/WindowsVista/WWFGetStart.mspx?mfr=true