Windows 工作流基础概念

本主题适用于 Windows Workflow Foundation 4。

.NET Framework 版本 4的工作流开发中会运用一些开发人员可能还不熟悉的概念。本主题介绍其中的一些概念以及如何实现这些概念。

工作流和活动

工作流是构成进程模型的操作的结构化集合。工作流中的每个操作都建模为一个活动。宿主使用 WorkflowInvoker 将工作流作为方法调用,使用 WorkflowInstance 对单个工作流实例的执行进行显式控制,并使用 WorkflowServiceHost 在多实例方案中进行基于消息的交互,从而实现与工作流的交互。由于工作流的步骤定义为活动的层次结构,因此层次结构中最顶层的活动可以认为是定义工作流本身。此层次结构模型替代以前版本中的显式 SequentialWorkflowStateMachineWorkflow 类。活动自身可作为其他活动的集合(使用 Activity 类作为基础,通常使用 XAML 定义)开发;或者使用 CodeActivityNativeActivity 类进行自定义创建,前者可以使用运行时进行数据访问,而后者则向活动作者公开工作流运行时范围。使用 CodeActivityNativeActivity 类开发的活动是使用符合 CLR 的语言创建的,如 C#。

活动数据模型

活动使用下表中所示的类型存储和共享数据。

变量

存储活动中的数据。

参数

在活动中移入和移出数据。

表达式

带有在参数绑定中使用的提升的返回值的活动。

工作流运行时

工作流运行时是工作流的执行环境。WorkflowInvoker 是执行工作流的最简单方法。宿主为以下操作使用 WorkflowInvoker

  • 以同步方式调用工作流。

  • 向工作流提供输入或检索工作流的输出。

  • 添加供活动使用的扩展。

ActivityInstance 是线程安全的代理,宿主可以使用该代理与运行时进行交互。宿主为以下操作使用 ActivityInstance

  • 通过创建实例或从实例存储区中加载实例的方法来获取实例。

  • 接收实例生命周期事件通知。

  • 控制工作流执行。

  • 向工作流提供输入或检索工作流的输出。

  • 向工作流发出继续信号并将值传递到工作流中。

  • 保存工作流数据。

  • 添加供活动使用的扩展。

工作流元素使用 ActivityExecutionContext 类获取对工作流运行时环境的访问。这些元素使用此类来解析参数和变量,以便安排子活动和实现多种其他用途。

服务

工作流提供一种自然地使用消息传递活动实现和访问 Windows Communication Foundation (WCF) 服务的方法。工作流服务由 WorkflowServiceHost 承载。

持久性、卸载和长时间运行的工作流

Windows 工作流通过提供以下功能,简化了创作长时间运行的反应式程序的过程:

  • 访问外部输入的活动。

  • 能够创建可由宿主侦听程序恢复的 Bookmark 对象。

  • 能够保存工作流数据并卸载工作流,然后作为对特定工作流中恢复 Bookmark 对象的响应,重新加载和重新激活工作流。

工作流会持续地执行活动,直到没有任何要执行的活动或者所有当前正在执行的活动均在等待输入为止。在后一种情况下,工作流处于空闲状态。通常宿主会卸载进入空闲状态的工作流,并在收到继续执行的消息时重新加载这些工作流。WorkflowServiceHost 为此功能提供相应支持并提供可扩展卸载策略。如果在执行块中使用了可变状态或无法以其他方式保存的数据,活动可以使用 ActivityExecutionContext 向宿主指示不应保存它。工作流还可以使用 Persist 活动将其数据显式保存到持久性存储介质中。