.NET Framework 4.6.1 中的工作流开发使用一些开发人员可能不熟悉的概念。 本主题介绍一些概念及其实现方式。
工作流和活动
工作流是用来建模过程的一组结构化操作。 工作流中的每个操作都建模成活动。 主机通过使用 WorkflowInvoker 调用工作流,以方法调用的方式进行交互,WorkflowApplication 用于显式控制单个工作流实例的执行,WorkflowServiceHost 用于在多实例方案中进行基于消息的交互。 由于工作流的步骤定义为活动的层次结构,因此可以说层次结构中最顶层的活动可以定义工作流本身。 此层次结构模型取代了以前版本中的显式 SequentialWorkflow
和 StateMachineWorkflow
类。 活动本身作为其他活动的集合进行开发(使用 Activity 类作为基类(通常使用 XAML 定义)或通过使用 CodeActivity 类进行自定义创建,该类可以使用运行时进行数据访问,或者通过使用 NativeActivity 类(该类向活动作者公开工作流运行时的广度)。 使用 CodeActivity 和 NativeActivity 类开发的活动是使用符合 CLR 的语言(如 C#)创建的。
活动数据模型
活动使用下表所示的类型存储和共享数据。
类型 | DESCRIPTION |
---|---|
变量 | 存储活动中的数据。 |
论点 | 在活动中移入和移出数据。 |
表达式 | 在参数绑定中使用的具有高返回值的活动。 |
工作流运行时
工作流运行时是在其中执行工作流的环境。 WorkflowInvoker 是执行工作流的最简单方法。 宿主为以下操作使用 WorkflowInvoker:
同步调用工作流。
为工作流提供输入或检索输出。
添加供活动使用的扩展。
ActivityInstance 是主机可用于与运行时交互的线程安全代理。 宿主为以下操作使用 ActivityInstance:
通过创建实例或从实例存储加载实例来获取实例。
接收实例生命周期事件通知。
控制工作流执行。
为工作流提供输入或检索输出。
向工作流延续发出信号,并将值传递到工作流中。
保存工作流数据。
添加供活动使用的扩展。
活动通过使用适当的 ActivityContext 派生类(例如 NativeActivityContext 或 CodeActivityContext)来访问工作流运行时环境。 它们用于解析参数和变量、计划子活动以及出于许多其他目的。
服务业
工作流提供了使用消息传递活动实现和访问松散耦合服务的自然方法。 消息传递活动基于 WCF 构建,是用于将数据传入和传出工作流的主要机制。 可以将消息活动组合在一起,为所需的任何类型的消息交换模式建模。 有关详细信息,请参阅 消息传送活动。 工作流服务是使用类WorkflowServiceHost托管的。 有关详细信息,请参阅 “托管工作流服务概述”。 有关工作流服务的详细信息,请参阅 工作流服务
持久性、卸载和长时间运行的工作流
Windows 工作流通过提供以下内容简化了长时间运行的反应程序的创作:
工作流会持续执行活动,直到没有其他要执行的活动或当前正在执行的所有活动正在等待输入为止。 在此后一种状态中,工作流处于空闲状态。 主机通常卸载已空闲的工作流,并在消息到达时重新加载它们以继续执行。 WorkflowServiceHost 提供此功能的功能,并提供可扩展的卸载策略。 对于使用易失状态数据或其他无法持久化的数据的执行块,活动可以通过使用 NoPersistHandle 来向主机指示这些数据不应持久化。 工作流还可以使用 Persist 活动将其数据显式保存到持久存储介质。