来博客园写WF主题博客已经3年了, 在园子里认识了很多朋友,也学了很多知识.看到园子现在的气氛不太好,我很着急,但唯一能做的就是写点技术文章以感谢博客园为我们提供这么好的交流环境
从WinFX到NET3.x再到NET4.0 ,WPF,WCF,WF 始终是放在一起的,WPF(silverlight)用于程序UI的展现,WCF用于程序通信,WF用于程序的逻辑控制,这种思想在微软提出WinFX到现在的NET3.x再到NET4.0都是十分明确的. WPF(silverlight)与WCF现在已被大家熟知,并已广泛使用.但关注WF的人却还不是很多.现在我准备从写几个WF4.0系列的文章,大家可以通过这几个系列的文章了解一下WF
目录
开始使用WF4.0
前言
WF的全称是Windows Workflow Foundation ,
最早接触WF是在2004年的时候,那时微软推出了一个CTP版的开发包,WinFX.
在WinFX中提供了三个内容: Avalon, Indigo, WinOE当时这三方面的内容我都有涉及
与微软很多的技术一样,WinFX在Bata2后就没有后续了.然而幸运的是我的这次长达一年的技术投入并没有浪费,WinFX在2006年以Net 3.0 的方式正式发布了(其实就算WinFX没有下文,我也没有什么遗憾,在学习WinFX的日子里,我理解了很多全新的设计思想)
在NET 3.0 中,
Avalon成为了Windows Presentation Foundation 简称为WPF
Indigo成为了 Windows Communication Foundation 简称为WCF
WinOE 成为了 Windows Workflow Foundation 简称为WWF
后来, 微软基于WPF推出了WFP/E, WFP/E就是silverlight的前身.
WPF,WCF,WWF从一开始就是绑在一起的,为什么WWF现在叫WF,少了一个"W",那是因为WWF与另一个缩写重名了 World Wild Fund for Nature"世界自然基金会"
世界自然基金会
那么WF到底是什么,在这里我先不做具体介绍,但WF绝对不是传统"工作流"层面的东西.
从WinFX到NET3.x再到NET4.0 ,WPF,WCF,WF 始终是放在一起的,
WPF(silverlight)用于程序UI的展现,WCF用于程序通信,WF用于程序的逻辑控制,这种思想在微软提出WinFX到现在的NET3.x再到NET4.0都是十分明确的.
WPF(silverlight)与WCF现在已被大家熟知,并已广泛使用.但关注WF的人却还不是很多.
为此,我准备写三个系列的文章: WF4.0 基础篇, WF4.0 应用篇, WF4.0设计篇,主要内容如下:
WF4.0基础篇WF4.0中各类Activity与功能类的详细使用说明
WF4.0应用篇WF4.0的架构,Activity设计,流程设计器开发
WF4.0设计篇如何将WF4.0应用到项目中,如何基于WF4.0设计项目
如果你对WF3.x或WF4 Bata 1有一定了解,可以看一下我写的这篇文章
WF4Bate 2与前版本的比较
http://www.cnblogs.com/foundation/archive/2009/10/22/1587798.html
如果你对WF3.X不了解,那也不用去了解WF3.X
本系列将从最基础的内容开始讲解WF4.0
创建WF4.0项目
1.打开VS2010 ,[File] -> [New] -> [Project]
2.在出现的[New Project]对话框的[Installed Templates]树上选[Workflow],在出现的模板列表框中选[Workflow Console Application]项
在[Name]框中输入[helloWorkflow],点击[OK]进入WF4.0项目的设计界面
创建一个"hello wxwinter"屏幕的输出的工作流
按[F5]运行程,会看到如下结果
程序结构说明
本例子包括两部分,用于描述流程结构的一个XAML文件与调用流程的宿主程序
XAML流程结构描述文件
WF4.0 的流程结构描述文件是一个XML格式的文件,其格式如下
(关于WF4.0的XAML文件格式,会在以后的文章中做具体介绍,在这里做一个基本说明)
x:Class="helloWorkflow.Workflow1"
....
>
Text="hello wxwinter "
....
/>
WF4.0的流程是由一组[活动]组成的,当流程运行时,流程内的[活动]按一定的规则依次执行
其中 是这个流程的根[活动]
是WF4.0 的一个自带的一个[活动],其功能就是在屏幕打印[Text属性]的内容
x:Class="helloWorkflow.Workflow1" 则是将XOML文件编译成NET类时所对应的类名
宿主程序
在使用[Workflow Console Application]模板创建时,会自动创建一个用于测试流程的控制台宿主程序,内容如下
class
Program
{
static
void Main(string[] args)
{
WorkflowInvoker.Invoke(new
Workflow1());
}
}
其中,[WorkflowInvoker]是一个用于调用工作流的功能类,可以使用该类的[Invoke 静态方法]调用流程.在本例中[Invoke(new
Workflow1())]所使用的类就是XOML文件中 x:Class="helloWorkflow.Workflow1" 所定义的类名
代码方式创建WF4.0工作流
class
Program
{
static
void Main(string[] args)
{
WorkflowInvoker.Invoke(codeCreateWorkflow());
}
//代码方式创建WF4.0工作流
static
Activity codeCreateWorkflow()
{
WriteLine writeLineActivity = new
WriteLine() { Text = "hello wxwinter" };
Sequence wxwinterWorkflow = new
Sequence();
wxwinterWorkflow.Activities.Add(writeLineActivity);
return wxwinterWorkflow;
}
}
按[F5]运行程,会看到如下结果