懂得Windows WorkFlow Foundation

每一个WF工作流都包含了一定数量的活动,每一个活动都实现工作流某些方面的功能。对这些活动来讲,工作流扮演着容器的角色,控制着活动的生命周期和执行顺序。WF立志于用统一的方式来支持系统工作流与人工工作流,如早前描述的,系统工作流是按预先定义好的顺序执行的,而人工工作流恰恰相反。为了都满足这些需求,WF提供了两种内置的工作流类型:顺序工作流:根据预先定义好的模式来执行活动的能力。状态机工作流:与外部发生的事件进行交互的能力。它们都依赖于同样的运行时环境,都能使用同样的定制的活动。顺序工作流很自然的适合系统工作流。状态机工作流则提供一种方法来为松散定义的人工工作流建模。一个独立的工作可以合并所有的这些元素,并把两种工作流融合起来。如果有必要,开发者还可以创建定制的工作流类型,不过WF应用系统大多数都只使用两个标准工作流类型中其中的一个。下面的章节都会描述,我们从顺序工作流开始。

使用顺序工作流

顺序工作流的目的是为了根据预定义好的顺序执行活动的工作流应用系统。这种顺序可以包括循环,分支和其他类型的控制流程。当工作流不会有一个已经定义了从开始到结束的路径。基础活动库里内置了一组在顺序工作流里使用的活动,这些活动包括:
IfElse:根据条件是否符合来执行两个或者更多路径的活动。
While: 重复执行一个或多个活动直到一条条件为真。
Sequence:根据定义好的顺序在同一时间里执行一组工作流。
Parellel: 并行执行一个或多个工作,在工作流继续下一步前等待并行中的所有活动都执行完成。
Code:    执行一段已经定义好的代码。
CompensationHandler: 包含一个补充逻辑,比如,当一些情况下,在执行一组其他的活动时发生了错误,一些代码会执行。
Listen:等待一个特别事件,当事件接收的时候执行一个或多个活动。
Delay:进行一个执行中的工作流挂起一定的时间。
CallExternalEvent:等待一个从应用系统中但是在工作流之外的方法调用。
InvokeWorkFlow:引起其他工作流执行。
InvokeWebService:调用WebService。
TransactionScope:允许将一个或多个其他的活动合并起来放在一个原子事务里。
Terminate:终止工作流执行。

下图展示了一个由WF工作流设计器创建的一个简单的顺序工作流和几个活动:

未命名

在这个领域里有过一些经验的人可能已经注意到在顺序工作流中使用的很多默认的活动与业务流程执行语言(BPEL)里的活动很类似。最初由Microsoft与IBM定义的BPEL,现在已经是OASIS标准。它的目的在于定义系统工作流。这也是WF众多方式中的一个子集。
为了满足那些希望使用BPEL的开发者,Microsoft为Windows WorkFlow Foudation提供了一个叫做BFEL的技术。它允许将在BPEL定义好的业务流程处理逻辑导入到一个WF工作流中,开发者也可以将WF工作流逻辑导入到BPEL。

posted @ 2008-05-11 23:07  Zhongkeruanjian  阅读(700)  评论(0编辑  收藏  举报