什么是工作流?
工作流是一组同软件或人交互的活动,以及活动间的联系,可以像一个流程图,也可以像一个状态机。
[图一,左边是流程图,右边是状态机]
什么是微软Workflow Foundation?
微软Workflow Foundation 是一组由基础运行组件和开发工具组成的工作流开发平台,它不是一个工作流产品。
Workflow Foundation 中的工作流模式
Workflow Foundation 中的工作流模式分为顺序工作流和状态机工作流两种。
什么是顺序工作流(Sequential Workflow)?
顺序工作流的执行过程是一个连续的活动序列,它在完成一个活动之后会去执行下一个活动,它允许分支和循环以及接收外部事件,但是只向前执行。
什么是状态机工作流(State Machine Workflow)?
一些业务过程在进行中呈现出不同的状态,在Workflow Foundation中用状态机来表示实际业务过程中的状态。状态机工作流由一组状态组成,每个状态可以接收一组事件,由事件来决定状态之间的转换,这样就实现了工作流的执行过程。
Workflow Foundation 架构
基础活动库/自定义活动库(Base Activity Library/Custom Activity Library)
运行时引擎(Runtime Engine)
运行时服务(Runtime Services)
活动库为工作流提供基本的元件,每个活动是相对独立的可执行单元。
运行时引擎为工作流提供运行环境,管理工作流的生命周期。
运行时服务会在运行时引擎中加载,他们为工作流提供辅助的服务。
Workflow Foundation 中的运行时服务包括:
计划服务(管理工作流的工作方式):DefaultWorkflowSchedulerService、ManualWorkflowSchedulerService。
批处理服务:DefaultWorkflowCommitWorkBatchService,SharedConnectionWorkflowCommitWorkService。
持久化服务(将工作流实例存储在硬盘上):SqlWorkflowPresistenceService。
跟踪服务:SqlTrackingService,SqlTrackingQuery。
以上服务均要通过运行时引擎(Workflow Runtime)加载。
Workflow 如何与外部交互?
组成Workflow的每一个Activity都可以接收外部事件,由Workflow接受的接口中的事件可将外部数据发送到工作流,工作流通过方法将数据发送给外部。
Workflow Foundation 如何支持分布式应用?
Workflow Foundation 内建支持基于Web Service 与 WCF 的分布式应用。在基础活动库中提供了通用的Web Service活动。
通过WebServiceInputActivity、WebServiceOutputActivity将工作流发布为Web服务。
通过InvokeWebServiceActivity调用Web服务。
Workflow Foundation 开发基本过程包括哪些?
1、分析业务流程,提取功能点并封装成Activity,可以利用微软的基础Activity库与自定义Activity组合。
基础Activity实现通用操作,自定义Activity实现业务。
2、利用微软提供的Workflow Designer 组织Activity 配置控制逻辑
3、找到Workflow与应用程序的交互点,通过定义接口使应用程序与Workflow建立协作关系,在应用程序中实现这些接口
4、根据业务需要为工作流配置运行时要启用的服务,如持久化、计划服务等。
Workflow Foundation 运行环境/开发环境
运行环境:
Windows Vista
Windows XP
Windows 2003
开发环境:
Visual Studio 2005+Visual Studio 2005 Extensions for .net 3.0( Workflow Foundation )
Visual Studio 2008
见微知著 — 从一小段代码观察Workflow Foundation
一段工作在Asp.net的全局代码:
- void Application_Start(object sender, EventArgs e)
- {
- //创建工作流运行时实例
- System.Workflow.Runtime.WorkflowRuntime workflowRuntime =
- new System.Workflow.Runtime.WorkflowRuntime();
- //创建工作流计划服务并在运行时服务中加载
- System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService manualService =
- new System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService();
- workflowRuntime.AddService(manualService);
- //启动工作流运行时
- workflowRuntime.StartRuntime();
- //存储工作流运行时实例到Application对象 这是Asp.net中的全局对象
- Application["WorkflowRuntime"] = workflowRuntime;
- }
- 一段工作Asp.net页中的代码:
- protected void StartRuntime_Click(object sender, EventArgs e)
- {
- //引用工作流运行时对象
- WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as WorkflowRuntime;
- //从运行时对象中取出计划服务实例
- ManualWorkflowSchedulerService manualScheduler =
- workflowRuntime.GetService(typeof(ManualWorkflowSchedulerService))
- as ManualWorkflowSchedulerService;
- //通过运行时对象创建一个类型为ASPNetSequentialWorkflow的顺序工作流实例
- WorkflowInstance instance = workflowRuntime.CreateWorkflow(
- typeof(ASPNetSequentialWorkflow));
- //启动工作流实例
- instance.Start();
- //让工作流实例参与计划服务
- manualScheduler.RunWorkflow(instance.InstanceId);
- }