工作流基础全解析:从核心概念到设计工具
立即解锁
发布时间: 2025-08-26 01:37:05 阅读量: 6 订阅数: 17 


Windows Workflow in .NET 3.5: 实战指南
# 工作流基础全解析:从核心概念到设计工具
## 1. 工作流 ID 的使用
工作流 ID 有着多种用途。例如,`WorkflowRuntime` 类具备一个 `GetWorkflow` 方法,该方法能够依据工作流的 ID 来获取对应的工作流实例。在触发那些需要由处于等待状态的工作流实例处理的事件时,也会用到工作流 ID。若要在工作流中使用外部事件,就必须传递源自 `ExternalDataEventArgs` 类的事件参数。这个类有一个 `InstanceId` 属性,必须将其设置为正确的工作流 ID。在触发事件时,正是借助这个 ID 来定位工作流的正确实例。
## 2. 工作流活动
工作流由一个或多个活动构成。活动可按不同方式进行分类:
### 2.1 标准活动与自定义活动
- **标准活动**:由微软随 WF 提供,像 `CodeActivity`、`DelayActivity`、`IfElseActivity` 和 `SetStateActivity` 等都属于标准活动,所有使用 WF 的开发者都能使用。
- **自定义活动**:WF 本身不包含,可由开发者自行开发、从社区工作流网站下载或从组件供应商处购买。它们是执行非标准任务的专用活动,能以无限的方式扩展原始基础,是将工作流用作特定领域语言的关键。开发者开发的任何自定义活动都可使用适合应用程序问题领域的术语。
### 2.2 简单活动与复合活动
- **简单活动**:无法包含其他活动,不负责控制和管理子活动,而是执行具体任务,例如 `CodeActivity`、`DelayActivity` 和 `SetStateActivity`。
- **复合活动**:包含其他子活动,直接或间接继承自 `CompositeActivity` 类,负责子活动的执行。像 `IfElseActivity`、`ListenActivity`、`ParallelActivity` 和 `StateActivity` 等都是复合活动,实际上,WF 提供的大多数标准活动都是复合活动。
活动分类如下表所示:
| 分类 | 特点 | 示例 |
| ---- | ---- | ---- |
| 标准活动 | 微软随 WF 提供 | `CodeActivity`、`DelayActivity` 等 |
| 自定义活动 | 开发者开发、下载或购买,执行非标准任务 | 无特定示例,根据需求开发 |
| 简单活动 | 不包含其他活动,执行任务 | `CodeActivity`、`DelayActivity` 等 |
| 复合活动 | 包含子活动,负责子活动执行 | `IfElseActivity`、`ListenActivity` 等 |
## 3. 工作流规则
工作流可选择性地定义规则,这些规则会在工作流实例执行期间进行评估,规则的评估由工作流运行时的规则评估引擎负责。
### 3.1 规则类型
规则可以是为 `IfElseActivity`、`WhileActivity`、`ReplicatorActivity` 和 `ConditionedActivityGroup` 等活动定义的简单布尔条件,这些活动也支持代码条件。代码条件以代码形式指定布尔条件,并编译到工作流中。
### 3.2 规则的强大之处
当使用 `PolicyActivity` 时,规则的真正强大之处就体现出来了。该活动封装了一组规则(称为 `RuleSet`)并按顺序进行评估。不过,这个顺序并非一定是静态执行的。在评估一条规则后,引擎可能会判定需要重新评估之前的规则。例如,如果当前规则修改了某个之前规则所依赖的值,就会出现这种情况,这种重新评估被称为前向链。
### 3.3 规则定义与优势
规则采用声明式模型进行定义,规则建模与工作流建模无缝集成,这让开发者可以选择将应用程序逻辑放置的位置,可以像以往一样放在代码中,也可以放在工作流的活动里,或者放在规则模型中。
规则条件相较于代码条件的一个优势是,它能够在运行时响应动态更新。声明的规则与工作流本身分开存储,Visual Studio 会使用与工作流相同的名称将规则序列化到一个单独的 `.rules` 文件中。由于规则的声明和评估与编译后的工作流代码是分开的,因此可以在运行时进行修改。相比之下,修改代码条件则需要重新编译工作流代码。
不过,代码条件在工作流中也有其用武之地。由于它被编译到工作流中,通常比规则条件更快,并且能够支持更复杂的逻辑以确定最终的布尔结果。使用代码条件时,开发者可以自由地进行计算、检查应用程序状态,一般可以在代码中做任何需要做的事情以返回布尔结果。
规则相关特点对比如下:
| 规则类型 | 定义方式 | 优势 | 劣势 |
| ---- | ---- | ---- | ---- |
| 规则条件 | 声明式模型,序列化到 `.rules` 文件 | 可运行时动态更新 | 相对较慢,逻辑复杂程度有限 |
| 代码条件 | 代码形式指定,编译到工作流 | 速度快,支持复杂逻辑 | 无法运行时修改,需重新编译 |
## 4. 设计时环境
WF 的一个重要部分是在开发工作流应用程序时可用的设计和开发工具。WF 提供了一组类库,用于构建工作流应用程序。可视化工作流工具能帮助开发者从类库中组织正确的元素来定义工作流。由于存在工作流类库,开发者并非必须使用可视化工具来构建工作流,也可以完全通过代码将工作流的活动连接起来,而无需使用可视化设计器。然而,可视化工具是 WF 最吸引人的特性之一,它让广大 .NET 开发者都能轻松接触到工作流。
WF 提供的可视化工作流工具与 Visual Studio 完全集成,提供了无缝的设计和开发环境。使用这些工具是开发 WF 应用程序的推荐方式。WF 可用的设计时工具如下:
- Visual Studio 项目模板:用于创建新的工作流项目。
- 集成工作流设计器:支持顺序工作流和状态机工作流。
- 集成活动设计器:用于设计自定义活动。
- 集成规则条件以及规则和规则集编辑器:用于声明和管理单个规则和规则组。
- 集成工作流调试器:允许在 Visual Studio 环境中调试工作流。
- 命令行工作流编译器(`wfc.exe`):用于编译工作流标记文件(`.xoml`)。
设计时工具列表如下:
| 工具名称 | 用途 |
| ---- | ---- |
| Visual Studio 项目模板 | 创建新工作流项目 |
| 集成工作流设计器 | 设计顺序和状态机工作流 |
| 集成活动设计器 | 设计自定义活动 |
| 集成规则条件及编辑器 | 声明和管理规则 |
| 集成工作流调试器 | 调试工作流 |
| 命令行工作流编译器(`wfc.exe`) | 编译工作流标记文件 |
## 5. 工作流创作模式
WF 支持三种不同的工作流创作模式:
### 5.1 仅代码模式
仅代码模式是默认的创作模式,也是开发者最常使用的模式,类似于 Windows Forms 应用程序的创作方式。在这种模式下设计工作流时,WF 设计器会生成代码并将其放置在 `Workflow1.designer.cs` 文件中,开发者直接添加到工作流的任何代码则会放入 `Workflow1.cs` 文件。生成的代码直接与工作流对象模型交互,向工作流中添加活动、向活动中添加子活动等。由于整个工作流都是用代码定义的,因此会作为程序集中的一个类进行编译。
### 5.2 代码分离模式
代码分离模式会将工作流模型的序列化形式保存在一个名为 `Workflow1.xoml` 的标记文件中,而代码则保存在一个单独的名为 `Workflow1.xoml.cs` 的文件中。`.xoml` 文件中的标记使用一种名为 XAML 的语法来保存工作流的序列化形式。XAML 是一种通用的、基于 XML 的标记语言,用于表示对象的层次结构,在这里,这些对象代表工作流中的活动。在编译时,标记文件(`.xoml`)会与代码文件(`.xoml.cs`)一起编译。
若要将代码分离工作流添加到项目中,可按以下步骤操作:
1. 从“项目”菜单中选择“添加新项”。
2. 选择“顺序工作流(带代码分离)”或“状态机工作流(带代码分离)”。
### 5.3 无代码模式
无代码工作流完全在 `.xoml` 文件中定义。若要使用该工作流,可以使用命令行工作流编译器(`wcf.exe`)进行编译,或者直接将其加载到工作流运行时引擎中。
无代码工作流允许在开发环境之外定义或修改工作流的结构。例如,如果在自己的应用程序中托管工作流设计器,就可以使用无代码工作流。在设计器中修改工作流后,将其序列化为 `.xoml` 文件,之后就可以像其他工作
0
0
复制全文
相关推荐










