《Microsoft Windows Workflow Foundation 入门:开发人员演练》http://www.microsoft.com/china/MSDN/library/Windev/WindowsVista/WWFGetStart.mspx?mfr=true 是一篇很不错的文章,不过由于其是11/30/2005发布的,撰写的对象为 Windows Workflow Foundation beta 1,因此文章中有一些类库的使用上和现在所使用的Release有所不同。但此文不失为一篇很好的accidence。
关于WF的几种项目类型:
您可以在各种选项中进行选择,其中每个选项都标识了特定类型的工作流应用程序。表 1 显示工作流项目模板的不完全列表。
表 1. Visual Studio 2005 中的工作流项目类型 |
|
类型 |
说明 |
顺序工作流控制台应用程序 (Sequential Workflow Console Application) |
创建用于生成工作流的项目,该工作流包含一个默认的顺序工作流和一个控制台测试宿主应用程序。 |
顺序工作流库 (Sequential Workflow Library) |
创建用于以库的形式生成顺序工作流的项目。 |
工作流活动库 (Workflow Activity Library) |
创建一个用来创建活动的库的项目,以后可以将其作为工作流应用程序中的构造块重用。 |
状态机控制台应用程序 (State Machine Console Application) |
创建用于生成状态机工作流和控制台宿主应用程序的项目。 |
状态机工作流库 (State Machine Workflow Library) |
创建用于以库的形式生成状态机工作流的项目。 |
空工作流 (Empty Workflow) |
创建可以包含工作流和活动的空项目。 |
Windows Workflow Foundation 支持两种基本工作流样式:顺序工作流和状态机工作流。
关于WF工具箱的部分工具(活动):
表 2 提供每个活动的简短说明,以及这些活动适用于哪些方案。
表 2. Windows Workflow Foundation 构造块 |
|
活动 |
说明 |
Code |
使您能够向工作流中添加 Microsoft Visual Basic .NET 或 C# 代码以执行自定义操作。但是,这些代码不应该用对 Web 服务等外部资源的依赖性来阻塞工作流。 |
Compensate |
使您能够在发生错误时调用代码来撤消或者补偿已经由工作流执行的操作。通常,对于现在已被取消的操作,您可能希望向先前已经获得成功通知的用户发送电子邮件。 |
ConditionedActivityGroup (CAG) |
使您的工作流能够基于特定于每个活动的准则有条件地执行一组子活动,直到针对 CAG 整体满足完成条件。子活动相互独立并可能并行执行。 |
Delay |
使您能够控制工作流的定时以及将延迟内置到工作流。您可以在 Delay 活动上提供超时,以便工作流在恢复执行之前暂停。 |
EventDriven |
代表一系列其执行由事件触发的活动。第一个子活动必须能够等待外部事件。可行的首要子活动是 EventSink 和 Delay。在这种情况下,Delay 用作超时。 |
EventSink |
在向 WorkflowRuntime 注册的数据交换服务引发指定事件时,使工作流能够从该服务接收数据。 |
ExceptionHandler |
使您能够处理指定类型的异常。ExceptionHandler 活动是其他活动的包装,在指定的异常发生时,这些活动实际执行所需的任何工作。可根据情况指定一个用于存储异常的本地变量,并且使其可以在代码隐藏中使用。 |
IfElse |
使您的工作流能够有条件地执行多个可供选择的分支之一。可在每个分支上放置一个条件,而条件为真的第一个分支将执行。无需在最后一个分支上放置条件,因为它被视为"else"分支。 |
InvokeMethod |
使您的工作流能够调用接口上的方法,以便将消息从工作流发送到向 WorkflowRuntime 注册的数据交换服务。 |
InvokeWebService |
使您的工作流能够调用 Web 服务方法。您需要指定要使用的代理类(使用 WSDL),以及您想要调用的方法的名称。同步和异步调用都受到支持。 |
InvokeWorkflow |
使您的工作流能够调用或启动另一个工作流(可达到任意深度)。例如,被调用的工作流可以调用第三个工作流,该工作流又可以调用第四个工作流,等等。递归调用不受支持。受支持的调用模型是发后不理。 |
Listen |
使工作流能够等待(可能存在的)多个事件之一,或者在指定的超时间隔之后停止等待,并且基于结果分支。可向每个分支中添加一个或多个由事件驱动的活动。只有第一个满足条件的分支被执行;其他分支都不会运行。 |
Parallel |
使您的工作流能够相互独立地执行两个或更多个操作。该活动在继续执行之前会等待这些操作终止。 |
Policy |
使您能够表示或执行规则集合。该活动不在工具箱中;要访问它的功能,必须创建自定义活动并使用派生。 |
Replicator |
使您的工作流能够创建给定活动的任意多个实例,并且顺序或同时执行它们。 |
SelectData |
使您的工作流能够通过在外部数据源对象上定义的方法查询外部数据。当触发 SelectData 活动时,关联的方法将在宿主线程内部执行。该方法返回的值被传递给工作流。 |
Sequence |
使您能够协调一组子活动的连续执行。该序列在最后一个子活动完成之后完成。 |
SetState |
使您的状态机工作流能够指定向新状态的转换。 |
State |
表示状态机工作流中的状态。 |
StateInitialization |
在 State 活动中,用作在状态转换时执行的子活动的容器。 |
Suspend |
挂起工作流的操作,以便能够在发生某个错误条件时进行干预。当工作流实例挂起时,将记录错误。可指定一个消息字符串来帮助管理员诊断发生了什么事情。与当前实例关联的所有状态信息都被保存,并且这些信息会在管理员继续执行时恢复。 |
Terminate |
使您能够在发生任何异常情况时立即结束工作流的操作。如果是在 Parallel 活动内部调用,则所有分支都被突然终止,而无论它们的当前状态如何。当工作流终止时,会记录错误,并提供一个消息以帮助管理员弄清楚发生了什么事情。 |
Throw |
使您能够引发指定类型的异常。使用该活动等效于在用户代码中引发异常的代码处理程序。该活动是引发 .NET 异常的声明性方式。 |
TransactionalContext |
事务上下文 是用于对活动进行分组的块。该活动主要用于事务性执行、补偿和异常处理,可以根据情况进行同步。通过同步事务性上下文,可确保对活动中共享数据的任何访问都将正确地序列化。 |
UpdateData |
使您的工作流能够通过在外部数据源对象上定义的方法更新数据存储区。当 UpdateData 活动被触发时,关联的方法将在宿主线程内部执行。 |
WaitForData |
使您的工作流能够从外部数据源对象接收信息。当传入的数据修改绑定数据源的状态时,该活动被触发。传入的数据是通过绑定数据源服务接收的。 |
WaitForQuery |
使外部应用程序能够在您的工作流中查询数据。该活动将在从宿主收到查询之前一直等待。来自外部应用程序的查询使用绑定数据源服务上的方法提交给工作流。 |
WebServiceReceive |
使作为 Web 服务本身公开的工作流能够接收 Web 服务请求。 |
WebServiceResponse |
使作为 Web 服务本身公开的工作流能够响应 Web 服务请求。 |
While |
使您的工作流能够在一个条件被满足时执行一个或多个活动。在每次迭代之前,都评估该条件。如果为真,则所有子活动都会执行;否则,该活动完成。可指定声明性条件或代码条件。 |
关于工作流文件的两种形式:(workflow.cs+workflow.designer.cs和workflow.xoml+workflow.xoml.cs的说明)
Visual Studio 2005 隐藏了这两种方法之间的大多数差异。您总是以可视方式设计工作流,并且 Visual Studio 2005 透明地将您的工作持久保存为两种不同格式中的一种。如果您选择采用"仅代码"解决方案(没有 XOML 和代码分隔),则可调整设计器代码以使其变得更加灵活一些。例如,可让它从配置文件或数据库中读取参数的默认值。如果选择采用工作流标记和代码分隔,则在工作流的代码及其模型之间产生巧妙的分隔。