各位网友大家好!
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
,由于时间有限文中错误之处希望大家指正。
联系方式
E-mail: Vista-WF#dl.cn(
请用
@
替代
#)
1 .Net Framework 3.0 简介及开发环境
相信大家对
.Net Framework 3.0
已经不再陌生了吧,具体的内容不用我介绍。我只是通过下面的一张图来对
.Net Framework 3.0
进行一个非常简单的介绍。
![](https://i-blog.csdnimg.cn/blog_migrate/c06408608f384f9be857d44452a3c6e6.png)
从图上我们可以看到 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
的技术架构开发,就可以做到开发阶段的部署透明化(呵呵!多么美好的未来呀!!!)。
注:
如果你还对范型、不完整类、匿名委托等概念不清楚,那你需要疯狂充电了,因为在后面的例子中会经常使用这些技术的。
|
操作系统:
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
。
从微软的定义来看我个人理解是:工作流是一种技术、是一个框架,微软通过这个技术和框架为客户(软件开发商)提供了一个工作流的解决方案。
注:
Windows Workflow Foundation
根据其英文名称应该缩写成
WWF
,但是微软为什么把他缩写为
WF
呢?感兴趣的网友可以在《程序员》
2006
年
11
月刊中找到答案。
|
在
WF
中流程模型分为两种:
Sequential
(顺序)模型
![]() |
Sequential
模型是流程按照事先预定的顺序执行,其中有可能存在分支(
IFELSE
)、循环(
WHILE
)等流程。
|
State Machine
(状态机)模型
![]() |
State Machine
模型是以事件(
Event
)为驱动,使得流程本身转换不同的状态,每个状态有其转变的范围(即都可以转变成那些状态)和驱动事件。
|
两种模型及可以相互独立运行也可以互相包含,基于两种模型大家可以开发出复杂的业务逻辑和商业模型。
我们还是以一个图来介绍
WF
的一些关键概念和
WF
的组成部分。
WF
包括了
Runtime Services
(运行时服务)、
Runtime Engine
(运行时引擎)、
Base Activity Library
(基础
Activity
库)。基于此我们要理解如下概念:
![](https://i-blog.csdnimg.cn/blog_migrate/5c9c001fda6c91d4aa8984960cf3defb.png)
Workflows
是一个
Activity
的集合
Workflows
需要寄宿在一个进程中,任何的应用或者服务都可以是
Workflow
的宿主
开发人员可以构建自己的
Activity
类库
Out-of-box activities and base for custom activities
基础的
Activity
类库,是自定义
Activity
的基类
Workflow execution and state management
负责
Workflow
的执行和管理的引擎
Hosting flexibility and communication
负责
Workflow
寄宿和通讯的服务
Graphical and code-based construction
一个图形化的设计器
通过这些概念我们了解到一个
Workflow
是由多个
Activity
组成,这些
Activity
可以
WF
中预定义的基础
Activity
也可以是用户自定义的
Activity
;
Workflow
需要有自己的
Runtime
,这个
Runtime
负责了
Workflow
的执行、管理和通讯。
这里有一个非常重要的概念就是
Activity
。所有的
Workflow
都是由
Activity
组成,那么什么是
Activity
呢?接下来我会向大家介绍。
2.4 什么是
Activity
我们可以从两个方面理解
Activity
:
Activity
是
workflow
一个已经编译的模块
是一个可执行的、可重用和可以组合的单元
基础的
Activity
是
Workflow
的一个步骤
复杂的
Activity
可以包含其他的
Activity
,例如:
Sequence
(一个
WF
预定义的
Activity
)
Activity
可以是合作伙伴或者客户提供的一个自定义的
Activity
,这个
Activity
可能完成一些特定的商业逻辑,例如:“
ApproveOrder
”
可以在
Activity
中定义属性和事件由
workflow
使用
Activity
中的方法是由
Activity
的作者实现(如:
Execute
),由
workflow
或则设计器进行调用
可以编译在
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
:控制流程类
2:
Workflow Lifetime Activity
:工作流相关
3:
Event Waiting Activity
:事件类
4:
Transaction and Exception Activity
:事务和异常处理类
5:
Data-Centic Activity
:数据(交换)处理类:用于
WF
处理空间和
Host
空间之间的数据交换。
6:
WebService Activity
:
WeSerivice
的处理
7:
The Code Activity
:代码处理类
8:
State Workflow Activity
:状态机工作流处理类
9:
Custom Activity
:用户自定义状态。
Feedback
问一下,在很多时候,比如审批事件,我们也要做很多数据操作,怎么样才能让我自己的业务跟wf的事件保持事务,当然 我的是sql 2000,并不能用dtc的.
@neuhawk
首先Activity是支持事务的如Transaction Context Activity:处理事务中的上下文,支持短期、长期的事务。
如果这个还不能满足可以使用WF的补偿机制进行处理。
我后面会继续介绍一些Activity的使用,到时应该可以解答你的问题。
首先Activity是支持事务的如Transaction Context Activity:处理事务中的上下文,支持短期、长期的事务。
如果这个还不能满足可以使用WF的补偿机制进行处理。
我后面会继续介绍一些Activity的使用,到时应该可以解答你的问题。
不太可能用Transaction Context Activity事务.
好像是beta版本的,RTM的没看到
5:Data-Centic Activity
5:Data-Centic Activity
指出一个错误
不是两种模型,而是三种,还有一种叫data driven
不是两种模型,而是三种,还有一种叫data driven
强烈建议大家看看这篇文章
http://blogs.msdn.com/davegreen/archive/2005/10/20/483309.aspx
虽然比较老了,但对于如何选择模型说的非常好,楼主也可以把其翻译了和园子里的朋友共享哈 :)
虽然比较老了,但对于如何选择模型说的非常好,楼主也可以把其翻译了和园子里的朋友共享哈 :)
2007-04-27 15:09 by
freeliver54
Mark 谢谢!