虽然我们无法跟踪微软的所有新技术,但是Windows工作流基类库(WF)却是一项我们无论如何都不能错过的技术。本文将阐明WF的优势,并且建立我们的第一个基于WF的应用程序。WF是一套多功能的编程构架,这套框架用于建立图形化的商业规则控制流程序。 WF是四项技术之一,其它三项技术为WPF、WCF和Windows CardSpace。这些技术同.NET 3.0框架一起发布。也许这个”3.0”非常带有迷惑性,有很多开发人员认为这些技术必须运行在新的.NET框架中,事实上,所有的技术都是运行在.NET2.0中的。这些软件和框架的层次如图1所示。 ![]() 图1
现在面临的问题是有很多.NET开发商一直不愿意使用新版本的.NET framework,原因是如果使用这些新的framework,就必须在客户的机器上安装它们。但事实上,.NET 3.0技术只是在.NET 2.0的基础上加了一些库而已。我们可以在VS2005中象使用其他的第三方.net库一样使用它们。
一、WF的优势 按着长规,一种新的技术必须为他们的黄金时代做准备,以及在它们被广泛使用之前提供切实可行的解决方案。这两点WF都做到了。WF不仅采用了.NET3.0技术,而且是根据实际需要的功能和设计经验而精心实现的。下面是关于WF的一些实际的优势:
1. WF提供了一套高度抽象和可视化的商业处理模型。这套模型可以非常容易地使用和被理解。无论使用它的是开发人员或是商业领域专家。 2. WF可以非常容易地改变与之相关的商业处理规则,并且不必重新编译。
3. WF编程模型可以使开发人员建立一套可测试的内核集合,并且可以在多个程序中使用它们。
如果和UML的活动图进行比较的话,WF图表拥有最好的软件构架,我们并不用担心这套构架过时,或是和商业处理逻辑有分歧,因为WF就是商业处理逻辑。 WF运行时为我们提供了一个强大的,可扩展的开发执行环境。为了可以长时间处理,当工作流处理空闲状态时,可以被保存在一个数据库中。当一个动作发生时,工作流被激活。 二、面向动作编程(Activity-Oriented Programming,AOP) WF向.NET开发人员引入了一个而向动作编程的概念。这套编程模型可以通过组合动作集合来完成大规模的商业处理逻辑。下面我们来看看图2所示的部分工作流,一个工作流图包含了如validateProductActivity, sellProductActivity, backOrderProductActivity和shipOrderActivity等动作。在工作流中的每一个动作都拥有一个单独的执行单元。 ![]() 图2 工作流图:一个包含了动作的工作流图,它们中的每一个都执行一个商业处理逻辑。
我们可以使用WF设计器将动作加到一个图表中,并且指定相应的条件以及基于一定规则的控制流指定工作流程。这种方法是非常强大的,它将使我们的应用程序非常容易编写,理解和配置。
三、开始编写WF程序
为了编写WF程序,我们需要如下的开发环境:
1. .NET 2.0 Framework
2. Visual Studio 2005
3. .NET 3.0 Framework
4. Visual Studio 2005 工作流扩展
在.NET 3.0中的WF框架中定义了超过350个类,这些类分别在如下的三个命名空间中:
1. System.Workflow.Activities
2. System.Workflow.ComponentModel
3. System.Workflow.Runtime
当我们在VS2005中安装WF扩展时,WF扩展将VS2005中加入一个工作流模板工程,我们可以选择这个模板工程来建立或加一个新的WF项目。
在安装完上术的软件后,我们就准备建立第一个工作流。下面的部分将描述建立和编写WF程序的一系列步骤。 四、顺序工作流和状态机工作流的对比 我们可以建立两个类型的工作流:顺序工作流和状态机工作流。在图2中显示的是一个顺序工作流,这个图类似于UML的动作图。这种工作流将按着预先定义的顺序来执行。 与之大不相同,状态机工作流定义了一个状态的集合,在些状态之间可以互相转换。工作流的外部事件将处理状态之间的转换。为了简便起见,本文将只关注顺序工作流。
最后,我们可以将任何顺序工作流描述成一个状态机工作流,反之亦然。然后,每一种工作流类型并不是对所有应用程序都适合,如在人机交互的情况下,状态机工作流将是最好选择。 五、建立一个工作流应用程序 在建立一个工作流之前,我们需要建立一个主应用程序,工作流将运行在这个程序中。为了完成这个工作,首先启动Visual Studio 2005,单击File菜单,选择New > Project。在新建工程对话框中选择相应的工程类型(如图3的工作流类型)和开发语言。
图5
接下来,将解决方案树展开,会出现三个System.Workflow引用。这三个库就是.NET3.0中所带的Windows工作流组件库。
为了更好地理解动作工作流应用程序,打开Program.cs文件(C#)或Module.vb文件(Visual Basic)。我们会看到如下的代码。
代码1(C#):
代码2(Visual Basic):
要注意的是这两个文件的最后两行会在调用WaitHandle.WaitOne()之后执行。这些代码行显示了一个控制台消息,并且等待控制台输入。将这两行加到我们的控制流应用程序中,并使我们的控制台工作流程序始终处于运行状态(直接输入一个字符串,并按回车为止)。 六、编写代码动作程序
图6 错误标记。表示还没有输入相应的动作代码。
为了使这个代码动作完整,并消除这个错误,双击图中的动作来建立一个事件处理函数。然后加入如下的处理代码。在本例子中,只是简单地向控制台写入一个字符串:
// C#
现在我们已经建立了一个工作流应用程序,并且拥有了一个动作,下面我们准备运行它。 七、运行我们的工作流程序
在运行程序之前,我们可以在main函数里设置断点来观察工作流本身的运行情况以及其他的细节部分。
在C#中打开Program.cs或在Visual Basic中打开Module.vb,并且在Main()方法中的表达式中设置一个断点。
按F5来运行这个工作流程序,然后按F10一步一步地跟踪Main()方法中的每一行程序。当我们按步骤跟踪代码时,要注意这些关键的动作在该方法中的执行情况。下面是程序各部分运行的步骤: 1. 首先,WF运行时被实例化。这个会最先发生,这是因为WF使用运行时来实例化,、执行以及管理我们的工作流。
2. 动作的处理方法当工作流的运行时的WorkflowCompleted 和 WorkflowTerminated事件发生时被注册。这将允许当一个工作完成或中途退出时通知工作流应用程序。
3. 工作流被实例化。要注意的是应用程序并没有直接实例化工作流,而是通过调用工作流运行时的CreateWorkflow()方法来实例化工作流的。
4. 最后,这个方法调用了工作流的Start()方法,这个方法开始执行工作流的动作代码。 |
|