Windows 工作流体系结构

本主题适用于 Windows Workflow Foundation 4。

Windows Workflow Foundation (WF) 提升了开发长时间运行的交互式应用程序的抽象级别。工作单元封装为活动。活动运行环境提供用于流控制、异常处理、错误传播、状态数据保存、从内存加载和卸载正在进行的工作流、跟踪以及事务流的功能。

活动体系结构

活动作为 CLR 类型开发,这些类型或者派生自 ActivityCodeActivityNativeActivity,或者派生自返回某个值的对应 ActivityCodeActivityNativeActivity 变体。通过开发派生自 Activity 的活动,用户可以组合预先存在的 WorkflowElement 对象,以便快速创建在工作流环境中执行的工作单元。另一方面,CodeActivity 支持通过将 CodeActivityContext 主要用于访问活动参数,在托管代码中创作执行逻辑。通过开发派生自 NativeActivity 的活动,用户可以通过 ActivityExecutionContext 访问运行时,以实现安排子级、创建书签、调用异步工作、注册事务等功能。

创作派生自 Activity 的活动是声明性的,可以在 XAML 中创作这些活动。下面的示例使用其他活动作为执行体来创建一个名为 Prompt 的活动。

<Activity x:Class='Prompt'
  xmlns:x='https://schemas.microsoft.com/winfx/2006/xaml'
    xmlns:z='https://schemas.microsoft.com/netfx/2008/xaml/schema'
xmlns:my='clr-namespace:XAMLActivityDefinition;assembly=XAMLActivityDefinition'
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns="https://schemas.microsoft.com/2009/workflow">
<z:SchemaType.Members>
    <z:SchemaType.SchemaProperty Name='Text' Type=' InArgument(s:String)' />
  <z:SchemaType.SchemaProperty Name='Response' Type='OutArgument(s:String)' />
</z:SchemaType.Members>
  <Sequence>
    <my:WriteLine Text='[Text]' />
    <my:ReadLine Bookmark='r1' Result='[Response]' />
  </Sequence>
</Activity>

活动执行上下文

ActivityExecutionContext 是活动作者的工作流运行时接口,提供对诸多运行时功能的访问。下面的示例定义一个使用执行上下文创建书签(一种机制,允许活动在其执行中注册一个延续点,该延续点可由将数据传入活动的主机恢复)的活动。

public class SimpleReadLine : WorkflowElement
{
    protected override void Execute(ActivityExecutionContext context)
    {
        context.CreateBookmark(this. DisplayName,
                new ActivityExecutionCallback(OnReadComplete));
    }

    void OnReadComplete(ActivityExecutionContext context, object state)
    {
        string dataRead = (string)state;
        Console.WriteLine("You entered: {0}", dataRead);
    }
}

活动生命周期

活动实例启动时处于“正在执行”状态。除非发生异常,否则活动将保持此状态,直到已完成执行所有子活动和所有其他挂起的工作(如 Bookmark 对象),此时,该活动将转换为“已关闭”状态。 活动实例的父级可以请求取消子级;如果可以取消子级,该子级则在完成时处于“已取消”状态。 如果在执行期间引发异常,运行时会使 WorkflowElement 进入“出错”状态,并将此异常向上传播到活动父链。下面列出了活动的三个完成状态:

  • **已关闭:**活动已完成其工作并退出。

  • **已取消:**活动已正常放弃其工作并退出。当进入此状态时,不会显式回滚工作。

  • **出错:**活动已遇到错误,并且在未完成其工作的情况下退出。

当保存或卸载活动时,活动会保持“正在执行”状态。