0         前言

各位网友大家好!Vista的到来对于跟随微软的开发人员可谓又是一场技术的革命,革命尚未到来已经就有了山雨欲来风满楼的感觉。从去年的Avalon(WPF开发代号)、Indigo(WCF开发代号)、InfoCard(CardSpace开发代号)到现在的.Net Framwork 3.0的RTM版本已经有了将近两年的时间,在这段时间里相信大家也都对这些技术有一定的了解。

本人在学习.Net Framework 3.0的过程中没有找到一个整体介绍的中文文档,更没有针对WF的具体介绍,所以只能通过MSDN和SDK学习。本文主要是收集了我在学习WF过程中的资料和我对WF的个人理解,在本文中会引用大量的微软的MSDN、PPT和SDK中的例子来对每一个内容进行讲解,同时也会引用一些网友的Blog(会注明作者)。本着自我学习、自我提高的目的和大家一起学习WF,由于时间有限文中错误之处希望大家指正。

联系方式

MSN:kilxy@hotmail.com

E-mail: Vista-WF#dl.cn(请用@替代#)

1         .Net Framework 3.0 简介及开发环境

1.1            .Net Framework 3.0 简介

相信大家对.Net Framework 3.0已经不再陌生了吧,具体的内容不用我介绍。我只是通过下面的一张图来对.Net Framework 3.0进行一个非常简单的介绍。


从图上我们可以看到3.0是以.Net Framework 2.0为核心,分别对不同技术和应用层面提供的一些模块。我记得一篇文章里面说到.Net Framework 3.0 不应该叫3.0更确切的叫.Net Framework 2.5(哈哈!不知道大家是否赞同这个说法)。

在.Net Framework 3.0包含了四个模块:

WPF(Windows Presentation Foundation):

WPF is a productive, unified approach to UI, Media, and Documents that you can use to deliver unmatched user experiences to your customers.

WPF提供了一个统一UI、媒体和文档的用户体验。

WPF统一了WinForm和Web的用户体验开发。

WCF(Windows Communication Foundation):

Unified framework for rapidly building service-oriented applications

WCF是一个迅速的建立SOA应用的框架。

WCF集成了WebService、Remotting和Com+的一些特征。

WF(Windows Workflow Foundation):

The Programming Model, Engine And Tools For Building Workflow Enabled Applications On Windows Platform.

在Windows平台上提供一个构建工作流程应用的模块、引擎和工具。

CardSpace(Windwos CardSpace):

Technology that simplifies and improves the safety of online login and authentication.

CardSpace是一个提供统一安全管理和身份认证的技术

通过上面简单的介绍,发现在.Net Framework 3.0中一个关键的内容就是统一和集成,微软希望是在.Net Framework 3.0开发时代不需要让开发人员费尽脑筋考虑是选择WinForm还是Web,使用WebService还是Remotting、Com+等等的技术难题,只需要按照.Net Framework 3.0的技术架构开发,就可以做到开发阶段的部署透明化(呵呵!多么美好的未来呀!!!)。

注:

如果你还对范型、不完整类、匿名委托等概念不清楚,那你需要疯狂充电了,因为在后面的例子中会经常使用这些技术的。

1.2            .Net Framework 3.0开发环境

操作系统:

Windows XP SP2

开发工具和安装步骤:

1.      .Net Framework 2.0(如果安装VS2005可以略过该步骤)

2.      Visual studio 2005 (可以使用 Express Edition)

3.      .NET Framework 3.0(WinFX) runtime components。

(dotnetfx3setup.exe)

4.      Windows SDK--1G左右

(6.0.6000.0.0.WindowsSDK_Vista_rtm.DVD.Rel.img)

5.      vsextwfx.msi(是VS2005开发WPF、WCF的插件)

6.      Visual Studio 2005 Extensions for Windows Workflow Foundation (EN).exe (是一个WF可视开发环境)

注:

以上工具除了Visual studio 2005都可以到微软的网站上下载。

本文使用的例子大部分原自SDK,故请大家在安装SDK时选择Sample。

2         WF基础概念介绍

2.1            什么是WF

什么是WF?这个问题相信大家也有一定的了解。WF是Windows Workflow Foundation的缩写,是微软为Windows平台开发工作流应用程序的一个模块、引擎和工具。这里借用微软的一些定义来具体描述WF。

           Single workflow technology for Windows

                Base for Microsoft products and ISV/customer solutions

                One technology for human and system workflow scenarios

           A framework for building workflow into applications

                A framework to build on - not an application or server

                Exposed to developers via WinFX

从微软的定义来看我个人理解是:工作流是一种技术、是一个框架,微软通过这个技术和框架为客户(软件开发商)提供了一个工作流的解决方案。

注:

Windows Workflow Foundation根据其英文名称应该缩写成WWF,但是微软为什么把他缩写为WF呢?感兴趣的网友可以在《程序员》2006年11月刊中找到答案。

2.2            WF的Workflow模型

在WF中流程模型分为两种:

Sequential(顺序)模型

Sequential模型是流程按照事先预定的顺序执行,其中有可能存在分支(IFELSE)、循环(WHILE)等流程。

State Machine(状态机)模型

State Machine模型是以事件(Event)为驱动,使得流程本身转换不同的状态,每个状态有其转变的范围(即都可以转变成那些状态)和驱动事件。

两种模型及可以相互独立运行也可以互相包含,基于两种模型大家可以开发出复杂的业务逻辑和商业模型。

2.3            关键概念

我们还是以一个图来介绍WF的一些关键概念和WF的组成部分。WF包括了Runtime Services(运行时服务)、Runtime Engine(运行时引擎)、Base Activity Library(基础Activity库)。基于此我们要理解如下概念:


       Workflows are a set of Activities

Workflows是一个Activity的集合

       Workflows run within a Host Process: any application or server

Workflows需要寄宿在一个进程中,任何的应用或者服务都可以是Workflow的宿主

       Developers can build their own Custom Activity Libraries

开发人员可以构建自己的Activity类库

       Base Activity Library

Out-of-box activities and base for custom activities

基础的Activity类库,是自定义Activity的基类

       Runtime Engine

Workflow execution and state management

负责Workflow的执行和管理的引擎

       Runtime Services

Hosting flexibility and communication

负责Workflow寄宿和通讯的服务

       Visual Designer

Graphical and code-based construction

一个图形化的设计器

通过这些概念我们了解到一个Workflow是由多个Activity组成,这些Activity可以WF中预定义的基础Activity也可以是用户自定义的Activity;Workflow需要有自己的Runtime,这个Runtime负责了Workflow的执行、管理和通讯。

这里有一个非常重要的概念就是Activity。所有的Workflow都是由Activity组成,那么什么是Activity呢?接下来我会向大家介绍。

2.4            什么是Activity

我们可以从两个方面理解Activity:

           Activities are the building blocks of workflows

Activity是workflow一个已经编译的模块

          The unit of execution, re-use and composition

是一个可执行的、可重用和可以组合的单元

          Basic activities are steps within a workflow

基础的Activity是Workflow的一个步骤

          Composite activities contains other activities EG: Sequence

复杂的Activity可以包含其他的Activity,例如:Sequence(一个WF预定义的Activity)

          Partners and customers author custom activities EG: “ApproveOrder”

Activity可以是合作伙伴或者客户提供的一个自定义的Activity,这个Activity可能完成一些特定的商业逻辑,例如:“ApproveOrder”

           Activities are classes:

          Properties and events are defined by the activity author and programmable from workflows

可以在Activity中定义属性和事件由workflow使用

          Has methods that are coded by the activity author but invoked by the workflow runtime (EG: Execute) or designer

Activity中的方法是由Activity的作者实现(如:Execute),由workflow或则设计器进行调用

          Can be built into workflow assemblies or deployed as re-usable libraries

可以编译在workflow中或则作为可重用库依赖于workflow

下面代码演示了一个Activity的例子:

public partial class SendEmailActivity :

System.Workflow.ComponentModel.Activity

{

public SendEmailActivity()

{

............

}

// override Execute with your custom logic

protected override ActivityExecutionStatus

Execute(ActivityExecutionContext context)

{

// you custom logic

return ActivityExecutionStatus.Closed;

}

//property

public string To

{

get{........;}

set{........;}

}

//event

public event EventHandler<CustomActivityEventArgs> Sending

{

add{........}

remove{........}

}

}

这里面一直在重点强调Activity的是重用,可以说一个Activity的最重要之处就是重用。重用不单单是代码的重用,而是业务逻辑的重用,这也是工作流应用的灵活之处。在开发工作流应用的时候,怎样划分业务逻辑?业务逻辑的颗粒度有多细?WF并没有规定,况且这个问题是仁者见仁,智者见智,并没有一个统一的定论。

个人的理解在定义一个Activity时要做到第一可重用、第二松耦合。在本文中只是对WF的组成和工作原理进行简单的介绍,不会深入讨论业务逻辑的划分和定义,我想即使不使用WF,业务系统也会遇到同样的问题。

2.5            Activity的其他概念

在自定义Activity时还有几个比较重要的概念,分别是Designer、ActivityValidator、CodeGenerator、Serializer、ToolboxItem和定义行为的SupportsTransaction、SupportsExceptionHandlers。实际上这些该是Activity的Attribute类,分别制定了Activity在设计器中的UI界面、对Activity在设计期间的完整性校验、Activity的序列化等操作。具体内容我会在后面章节具体介绍,这里只介绍如何使用。

[Designer(typeof(CustomActivityDesinger),typeof(IDesigner))]

[ActivityValidator(typeof(SendEmailValidator))]

public partial class SendEmailActivity :

System.Workflow.ComponentModel.Activity

{

......

}

public class CustomActivityDesinger : ActivityDesigner

{

......

}

public class SendEmailValidator :

System.Workflow.ComponentModel.Compiler.ActivityValidator

{

......

}

2.6            Activity分类

现在提供的Activity大约有28种,分成8类:

1:   Control Flow Activity:控制流程类

2:   Workflow Lifetime Activity:工作流相关

3:   Event Waiting Activity:事件类

4:   Transaction and Exception Activity:事务和异常处理类

5:   Data-Centic Activity:数据(交换)处理类

6:   WebService Activity:WeSerivice的处理

7:   The Code Activity:代码处理类

8:   State Workflow Activity:状态机工作流处理类

9:   其它,Custom Activity:用户自定义类

分类中具体的Activity如下:

1:   Control Flow Activity:控制流程类

          Sequence Activity:顺序流程

          Parallel Activity:并行流程

          IfElse Activity:条件判断流程

          While Activity:循环流程

          ConditionedActivityGroup:条件组

          Replicator Activity:自我复制。可以在运行中自我复制实例。

          Delay Activity:延时执行。

2:   Workflow Lifetime Activity:工作流相关

          InvokeWorkflow Activity:调用执行另外的工作流

          Suspend Activity:暂停当前执行的工作流

          Terminate Activity:中止工作流

3:   Event Waiting Activity:事件类

          EventDriven Activity:等待事件驱动。指定要等待处理的事件名,参数等

          Listen Activity:侦听消息。这个可以同时侦听很多消息。一个Listin里面有多个EventDriven。

4:   Transaction and Exception Activity:事务和异常处理类

          Transaction Context Activity:处理事务中的上下文,支持短期、长期的事务。

          Throw Activity:抛出异常

          ExceptionHandler:异常处理。

          Compensate Activity:补偿处理,只能放在Exception中,处理一些回滚处理等。

5:   Data-Centic Activity:数据(交换)处理类:用于WF处理空间和Host空间之间的数据交换。

          UpdateData Activity:WF把数据更新到Host

          SelectData Activity:WF发向Host的请求

          WaitForData Activity:

          WaitForQuery Activity:Host发向WF,WF返回DataSource

6:   WebService Activity:WeSerivice的处理

          InvokeWebService Activity:调用WebService

          WebServiceReceive Activity

          WebServiceResponse Activity

7:   The Code Activity:代码处理类

          Code Activity:可写一些代码。但是我不觉得这样的处理好,因为这样的逻辑有点写死进程序里了。

8:   State Workflow Activity:状态机工作流处理类

          State:状态。状态机的一个状态。一个工作流必须有个初始状态,有个结束状态。

          StateInitialization:初始状态。我好像没用过这个

          SetState:设置下一个状态。

9:   Custom Activity:用户自定义状态。

WF(Windows Workflow Foundation)相关推荐

  1. 和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例(转)

    和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例 今天开始,我打算开始学习WWF,从网上搜索到了部分相关资料,也找到了一些文档和实验.但是,资料以 ...

  2. 和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例

    今天开始,我打算开始学习WWF,从网上搜索到了部分相关资料,也找到了一些文档和实验.但是,资料以英文的占多数,所以,在学习起来似乎比较吃力,不过相信我能坚持下来,顺便提高点英语阅读能力,不过本人英文水 ...

  3. 你还记得windows workflow foundation吗

    很多年前,windows workflow foundation还叫WWF,而直译过来的名称让很多人以为它就是用来开发工作流或者干脆就是审批流的. 博主当年还是个懵懂的少年,却也知道微软不会大力推一个 ...

  4. Windows Workflow Foundation(WWF)介绍

    Windows Workflow Foundation:支持基于工作流的应用程序 工作流是一个简单思路:按照特定顺序执行的一系列步骤.您甚至可以认为每个应用程序都在执行工作流,因为每个应用程序都执行某 ...

  5. Windows Workflow Foundation 4.0

    转:http://www.cnblogs.com/foundation/category/215023.htm WF4.0 技术文章 WF4.0 流程设计器例子 (提供状态机模板) 摘要: WF4.0 ...

  6. Windows Workflow Foundation 2 规则引擎简介

    转载于:MSDN http://www.microsoft.com/china/MSDN/library/Windev/WindowsVista/intWF_FndRlsEng.mspx?mfr=tr ...

  7. 我们为什么需要Windows Workflow Foundation?

    http://blogs.msdn.com/b/stbcblog/archive/2008/11/27/why-do-we-need-windows-workflow-foundation.aspx ...

  8. WWF(Windows Workflow Foundation)开发环境的建立。 .NET 技术前瞻,WWF,Windows,Workflow,Foundation...

    1.安装WindowsSDK for Vista,有1.14G之巨,可以从MS的网站上下载,不过需要验证WINDOWS,可以去讯雷区用WindowsSDK为关键字搜索下载. 2.安装Virsul St ...

  9. Windows WorkFlow Foundation学习资源

    微软主站 Microsoft Windows Workflow Foundation 入门:开发人员演练 转载于:https://www.cnblogs.com/zwx/archive/2007/01 ...

最新文章

  1. eclipse运行程序时只有run on server
  2. 校招容易踩雷?这份“避雷针”指南拿走不谢
  3. Linux Top 命令解析 比较详细
  4. 作为前端,你不得不知道的SEO
  5. openssh设置免密码登录远程服务器
  6. 优雅的使用Js或CSS处理文本的截断与展示
  7. html标签 .doc,HTML标签.doc
  8. 【HDU5726】GCD(区间GCD查询+统计区间gcd为k的区间个数----线段树/st表+思维)
  9. 华为手机的封神之路,小米OV谁能复刻?
  10. SSM框架整合环境搭建
  11. 应广单片机 c语言,应广单片机 MINI-C编程指南.pdf
  12. matlab 打开立即窗口,《如何编程打开或关闭VBE界面中的立即窗口及其他窗口?》-- access911.net 文章...
  13. 聪明的猴子 黑暗爆炸 - 2429
  14. Python中的与或非
  15. 基于sklearn实现Bagging算法(python)
  16. 千万 PV,百万PV什么意思?
  17. 湖南省工业职业技术学院 计算机,湖南工业职业技术学院
  18. Android手电筒案例
  19. LaTeX--5--一个文档的基本结构/导言区/标题_作者_日期
  20. 操作系统文件存储空间管理(存储空间的划分与初始化)

热门文章

  1. Python如何操作Access数据库及如何操作accdb文件
  2. k8s(kubernetes)通过jenkins从harbor拉取镜像,包括yaml传参(史诗级,保姆级)
  3. IP 地址的A B C类划分、区别
  4. 【Houdini18.5/入门】程序化uv01-将uv壳布局在指定范围
  5. 傅盛提醒:撤离北京相当危险
  6. eclipse安装springboot插件
  7. JavaScript Array数组分页
  8. sap甲方_SAP顾问现状
  9. 上传文件夹到nas服务器,文件上传到群晖服务器
  10. 【FPGA教程案例28】基于FPGA的DDS直接数字频率合成器之一——原理介绍