“补偿”示例

Download sample

“补偿”定义由业务异常产生的业务逻辑的执行。 它单独位于对业务过程建模的工作流设计器的范围内;补偿的触发是由用户(而不是运行时)定义的。 运行时提供了对其定义补偿的机制。

在此示例中,所补偿的工作单元包含在 CompensatableTransactionScopeActivity 活动中。 然后,将为对其定义补偿工作的此范围定义 CompensationHandlerActivity 活动。 由于只有在范围完成时才能对其进行补偿,因此 ThrowActivity 活动在范围完成执行后将引发异常。 此异常由包含补偿活动的异常处理程序捕获。 补偿活动指定运行时接下来将执行的目标范围。

在此方案中,将接收采购订单并从买方的信用卡中提取资金。 工作流将检查选定的产品是否可用。 如果产品可用,则发运产品。 如果产品缺货,则引发 DiscontinuedProductExceptionDiscontinuedProductException 由工作流异常处理程序捕获。 然后,异常处理程序将触发处理程序中包含的 CompensateActivity 所定义的补偿处理程序。 补偿处理程序随后将资金退还回给买方。

示例的输出如下所示:

“补偿”示例输出

使用示例

若要使用此示例,您必须创建 SQL 持久性数据库。

创建 SQL 持久性数据库

  1. 在 Microsoft SQL Server 2005 Express、SQL Server 2000 或更高版本或 SQL Server 2000 Desktop Engine (MSDE) 中,使用如下 SQL 查询语句创建名为 WorkflowPersistenceStore 的新数据库:

    CREATE DATABASE SqlPersistenceService

    注意:在工作流应用程序中同时使用 SqlTrackingServiceSqlWorkflowPersistenceService 时,建议对持久性服务和跟踪服务使用单一数据库。

  2. 在 SQL Server 查询分析器工作区中,从可用数据库列表中选择在步骤 1 中创建的数据库。

  3. 在**“文件”菜单上,单击“打开”**并打开 SQL 脚本 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<语言>\SqlPersistence_Schema.sql

  4. 通过单击**“执行”**来执行查询,或按 F5 创建 SQL 持久性服务表。

  5. 在**“文件”菜单上,单击“打开”**并打开 SQL 脚本 %WINDIR%\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL\<语言>\SqlPersistence_Logic.sql

  6. 通过单击**“执行”**来执行查询,或按 F5 创建 SQL 持久性服务存储过程。

生成示例

  1. 通过单击本主题中的**“下载示例”**来下载该示例。

    这会将示例项目提取到本地硬盘。

  2. 单击**“开始”,依次指向“程序”“Microsoft Windows SDK”,然后单击“CMD 外壳”[CMD Shell]**。

  3. 转到示例的源目录。

  4. 在命令提示符处键入 MSBUILD <解决方案文件名>

运行示例

  • 在 SDK 命令提示窗口中,运行 Compensation\bin\debug 文件夹(对于该示例的 VB 版本为 Compensation\bin 文件夹)中的 .exe 文件,该文件夹位于该示例的主文件夹下。

请参见

参考

CompensatableTransactionScopeActivity
CompensationHandlerActivity
CodeActivity
FaultHandlerActivity
FaultHandlersActivity
IfElseActivity
IfElseBranchActivity
ThrowActivity

其他资源

Using the CompensationHandler Activity
Adding Compensatable Activities and Compensation Handlers
Compensation Overview
“活动”示例
Windows Workflow Foundation 示例

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。