现在的位置: 首页 > 综合 > 正文

WF学习系列之二:开发工作流知识点概述

2011年08月08日 ⁄ 综合 ⁄ 共 6128字 ⁄ 字号 评论关闭
 

注:本文从msdn中摘录而成,主要提供有关创建工作流时的可用功能的概念性信息。主要介绍以下15个方面:

1 工作流创作样式 :主要包括顺序工作流、状态机工作流、数据驱动工作流。

2 工作流创作模式 :分为三种,包括仅限代码、代码分离、无代码。典型的用法是使用设计器定义工作流,使用代码表示业务逻辑。

3 使用活动控制流 :使用一些活动来控制工作流的逻辑流。

4 在工作流中使用条件 :利用条件来控制工作流的行为。

5 在工作流中使用 RuleSet :规则的定义,需要好好研究,也是非常关键的一个知识点。

6 使用工作流中的事务 :通过TransactionScopeActivity, CompensatableTransactionScopeActivity活动来支持事务故障恢复。

7 工作流中的批处理状态信息 :通过IWorkBatch IPendingWork 来获取服务和工作流实例保留状态信息。

8 工作流中的错误处理 详见《WF学习系列之一》

9 在工作流中使用补偿 详见《WF学习系列之一》

10 在工作流中使用工作流更改 :重点了解什么情况下适合更改工作流,有什么限制条件等。

11 工作流中的数据交换 详见《WF学习系列之一》

12 在工作流中使用角色 WF 提供了一种用于对所有支持数据输入的活动的、基于角色的访问机制。

13 如何:编译工作流 :根据工作流创作模式的不同,编译的方式也有区别。

14 如何:序列化工作流 :序列化和反序列化是实现工作流持久化的基础。

15 使用工作流标记 :使用可扩展应用程序标记语言 (XAML) 创建标记源文件从而创建工作流的声明性方式。

 

1 工作流创作样式

      Windows Workflow Foundation 支持多种工作流创作样式,如顺序、状态机和数据驱动。 顺序样式非常简单,对于总是相同的重复、可预测操作很有用。 状态机工作流样式包含一组事件驱动状态。 数据驱动样式依赖数据来确定是否基于本地数据状态来运行某些活动。

      顺序工作流

      顺序工作流样式按逐个顺序执行一组包含的活动。 您可以向顺序工作流添加其他复合活动以实现并行 (ParallelActivity)、事件驱动并行 (EventHandlingScopeActivity)、数据驱动执行 (ConditionedActivityGroup)、事件驱动分支 (ListenActivity) 熟悉的强制性控制流模式,如条件分支 (IfElseActivity) 和迭代(WhileActivityReplicatorActivity)。 您也可以利用 Windows Workflow Foundation 的扩展性编写自定义复合活动,用这些活动实现您的解决方案需要的特定控制流模式。

下面的流程图显示一个顺序工作流的示例。

 

顺序工作流按顺序方式执行活动,直到最后一个活动完成。 即使在正常操作下,顺序工作流也不必是完全确定的。 例如,您可以使用 ListenActivity 活动或 ParallelActivity 活动,在这两种情况下事件的准确顺序可以不同。

 

      状态机工作流

      在工作流创作的状态机样式中,作者将工作流建模为状态机。 工作流本身由一组状态组成。 将一个状态指示为初始状态。 每个状态都可以接收一组特定事件。 视事件而定,可以转换到另一个状态。 状态机工作流可以有最终状态。 当对最终状态进行转换时,工作流将完成。

      下面的流程图是一个状态机工作流的示例。

 

 

活动

说明

EventDrivenActivity

用于依赖于外部事件开始执行的状态 EventDrivenActivity 活动必须具有实现 IEventActivity 接口作为第一个子活动的活动。 有关更多信息请参见使用 EventDrivenActivity 活动

SetStateActivity

指定到新状态的转换 有关更多信息,请参见使用 SetStateActivity 活动

StateActivity

表示状态机中的一个状态;可能包含其他 State 活动。 有关更多信息,请参见使用 StateActivity 活动

StateInitializationActivity

进入某个状态时执行;可能包含其他活动 有关更多信息,请参见使用 StateInitializationActivity 活动

StateFinalizationActivity

在离开 StateActivity 活动时执行包含的活动 有关更多信息请参见使用 StateFinalizationActivity 活动

 

 

2 工作流创作模式

      Windows Workflow Foundation 默认将工作流定义与业务逻辑相分离。 在典型的工作流创作方案中工作流创建者可以使用设计器来指定工作流定义然后使用 C# Visual Basic 代码来表示业务逻辑。 这种创作模式称为代码分离

    Windows Workflow Foundation 支持以下针对工作流实现的创作模式

    仅限代码 这是 Windows Workflow Foundation 的默认创作模式。 在该模式下可以使用 C# Visual Basic 代码来指定使用 Windows Workflow Foundation API 集的工作流。 在仅限代码的工作流中工作流定义使用 C# Visual Basic 代码来声明工作流结构。 仅限代码的工作流必须进行编译。

    代码分离。 在此模式下,可以通过使用工作流标记并将其与 C# 或 Visual Basic 代码隐藏实现进行组合来定义工作流,这与 ASP.NET 模型类似。 与无代码创作模式不同,代码分离的工作流必须进行编译,并且无法直接加载到工作流运行时引擎。

    无代码。 在此模式下,可以通过使用工作流标记来创作工作流。然后可以使用 Windows Workflow Foundation 命令行工作流编译器来编译工作流,也可以通过宿主应用程序将工作流标记文件加载到工作流运行时引擎。

 

3 使用活动控制流

      Windows Workflow Foundation 包含一组可提供各种功能的活动。 使用其中的一些活动可以控制工作流的逻辑流。 有关 Windows Workflow Foundation 基本活动库中的活动的完整列表请参见 Windows Workflow Foundation 活动。

下表列出了 Windows Workflow Foundation 基本活动库中可用于控制工作流逻辑流的活动。

活动

说明

ListenActivity

允许工作流根据某种事件或超时期限到期,进行条件分支。 有关更多信息,请参见使用 ListenActivity 活动

IfElseActivity

测试每个分支条件,在第一个条件为 True 的分支上执行活动。 有关更多信息,请参见使用 IfElseActivity 活动

ParallelActivity

允许工作流执行相互独立的两个或更多操作。 有关更多信息,请参见使用 ParallelActivity 活动

SuspendActivity

挂起工作流的操作,以便能够在出现某种错误条件时进行干预。 有关更多信息,请参见使用 SuspendActivity 活动

TerminateActivity

用于在出现某种错误条件时立即结束工作流的操作。 有关更多信息,请参见使用 TerminateActivity 活动

WhileActivity

使工作流能够在条件得到满足之前进行循环。 有关更多信息,请参见使用 WhileActivity 活动

ConditionedActivityGroup

也称为 CAG 根据应用于 CAG 本身的条件以及分别应用于每个子活动的条件来执行子活动。 有关更多信息,请参见使用 ConditionedActivityGroup 活动

EventDrivenActivity

包装另一个活动,并在发生指定事件时执行该活动。 有关更多信息,请参见使用 EventDrivenActivity 活动

ReplicatorActivity

创建和执行子活动的多个实例。 有关更多信息,请参见使用 ReplicatorActivity 活动

SequenceActivity

根据一种已定义的排序方式,运行一组子活动。 有关更多信息,请参见使用 SequenceActivity 活动

 

 

4 在工作流中使用条件

    可以使用条件来控制工作流的行为。 运行时引擎计算条件的值,然后根据计算结果执行操作。

    有两种方法可以在工作流中表示条件:

在代码中可以通过编写处理程序来表示条件,该处理程序为条件设置 Result 属性。

还可以将条件表示为规则条件,规则条件是规则文件中的 System.CodeDom 表达式。

   

    条件活动

    随 Windows Workflow Foundation 一起提供的几个活动使用以下条件:

第一个是 IfElseBranchActivity,它包含在 IfElseActivity 活动中,在具有的条件计算结果为 True 时执行。

只要 WhileActivity 活动的条件计算结果为 true,它就会连续执行所包含的任何活动。 每次循环完成时重新计算该条件。

ConditionedActivityGroup 连续执行所包含的任何活动,直到其条件计算结果为 true。 ConditionedActivityGroup 中的每个单个活动都具有 When 条件。 仅当 When 条件计算结果为 true 时才执行各个活动。

ReplicatorActivity 在其 UntilCondition 属性计算结果为 true 时完成执行。

也可以在您创建的自定义活动中使用条件。

 

注意: 

    规则条件和代码条件可以引用在工作流类中定义的公共、私有和内部成员。

 

5 在工作流中使用 RuleSet

RuleSet 由一个或多个规则条件及其导致的操作组成。可以将规则视为 IF-THEN-ELSE 语句,其中,条件对应于 IF,而操作定义 THEN 和 ELSE 子句的行为。

操作可以执行以下任务:

·    设置工作流上的字段或属性。

·    调用工作流上或工作流中的对象上的方法。

·    调用被引用程序集中的类型上的静态方法。

·    执行 Halt 或 Update 语句。

·    Windows Workflow Foundation 规则引擎设计为以基于优先级的方式运行规则并且支持正向链接。

 

 

6 使用工作流中的事务

    Windows Workflow Foundation 通过使用 TransactionScopeActivity 活动包装 .NET Framework System.Transactions 事务(如果发生错误,这些事务会自动回滚它们的操作)来支持从事务故障恢复。有关 System.Transactions 的更多信息,请参见 .NET Framework System.Transactions.Transaction 和 System.Transactions.TransactionScope 类及 MSDN 库中的相关类型。

    CompensatableTransactionScopeActivity 活动像 TransactionScopeActivity 活动一样对事务进行包装,只不过前者还支持补偿。

 

7 工作流中的批处理状态信息

    工作流定期在各个检查点(称为持久性点)将其状态保存到持久性存储中。 如果在工作流中出现错误,则可能需要运行时引擎检索保留的该信息以恢复稳定状态。 如果两个或多个组件正在进行通信,则通常情况下,最好协调持久性存储以便组件的状态保持一致。 工作流的外部服务使用工作批次来保留状态信息。 这些服务对其工作项进行批处理并共享与工作流的事务相同的事务。如果工作流尚未提交事务,则服务仍可以在持久点期间对某些工作项进行批处理。

    Windows Workflow Foundation 提供 IWorkBatch 和 IPendingWork 以帮助服务和工作流实例保留状态信息。

    在对从工作流初始化的服务进行的所有调用中,运行时引擎在其线程调用上下文中提供一个 IWorkBatch。 服务可以将挂起的工作项添加到此工作批次,以便运行时引擎可以在单个事务中提交所有相关的工作项。

    若要将工作项添加到批次中或向批次注册,请使用下面的语句:

WorkflowEnvironment.WorkBatch.Add(IPendingWork work, object workItem);

    此外,还可以将 IPendingWork 传入 ExternalDataEventArgs 的构造函数。

 

    调用组件时的操作顺序

1) 在初始化期间,工作流创建一个工作批次。

2) 工作流将工作批次附加到对组件的方法调用中。通过使用 WorkflowEnvironment 类,服务可以访问其任何方法中的工作批次。

 

    提交点处的操作顺序

1) 工作流创建一个事务。

2) 工作流循环访问工作批次并收集组件的所有工作项(保持顺序)以创建工作批次。工作流传入事务和工作批次,调用组件上的 Commit 方法。

3) 组件将工作批次中的工作添加到事务。

4) 对工作项在工作批次中的所有组件重复第 2 步和第 3 步。

5) 当 Commit 通知成功时,工作流提交对应的事务。

6) 成功提交事务后,工作流循环访问工作批次并收集每个组件的所有工作项(如第 2 步所述)。工作流传入对应的事务和工作批次,调用每个组件的 Complete 方法。

 

    对工作流错误的操作顺序

1) 工作流标识所有与出错范围相关的工作项并构建一个工作批次。

2) 工作流调用每个唯一的、将工作批次中所有工作的完成状态设置为 false 的 IPendingWork 的 Complete 方法。

3) 如果工作批次属于 TransactionScopeActivity 活动或 CompensatingTransactionScopeActivity 活动的子上下文,则工作流放弃工作批次中的所有工作。

4) 从错误恢复后,运行时保持对所有剩余工作批次项的引用。随后,可能会在将来的持久点提交该工作。

 

    重试工作批次事务

    DefaultWorkflowCommitWorkBatchService、SharedConnectionWorkflowCommitWorkBatchService、SqlWorkflowPersistenceService 和 SqlTrackingService 都具有重试工作批次提交的功能。 此功能通过 EnableRetries 属性启用,它使这些服务能够在网络超时、计算机重新启动、SQL Server 进程重置等情况下一直尝试提交工作批次。重试次数设置为 20。前三次重试会依次紧接着发生。 此后,每个后续重试之间都有一段延迟。 应用程序可以在其连接字符串中调整连接超时以部分地调整重试的时间间隔。可以通过编程方式或配置文件设置此属性。有关如何通过编程方式设置此属性的更多信息,请参见每个服务的 EnableRetries 属性。 有关如何通过配置文件设置此属性的更多信息,请参见Workflow Configuration Files。

 

8 工作流中的错误处理

    Windows Workflow Foundation 中的错误处理指的是以异步方式处理异常<

抱歉!评论已关闭.