补偿

WF 中的补偿是这样一种机制:发生后续失败时,可以使用补偿(按照应用程序定义的逻辑)来撤消或补偿先前完成的工作。通过事务可以将多个操作合并为单个工作单元。使用事务时,如果事务进程中任何部分出现错误,则您的应用程序可以中止(回滚)在事务内执行的所有更改。但是,如果工作长时间运行,使用事务可能不合适。例如,一个作为工作流实现的差旅计划应用程序。该工作流的步骤可能包含预订航班、等待经理批准,然后支付机票费用。这个过程会花费几天的时间,不适合将预订航班步骤和支付机票费用步骤合并到同一事务中。在此方案中,如果在以后的处理中出现失败,可以使用补偿撤消工作流的预订步骤。

使用补偿

如果工作流包含用于执行无法完成此工作流或事务不合适时应撤消或补偿的逻辑的活动,则可以将这些活动置于 CompensableActivity 活动中。CompensableActivity 活动包含多个子活动部分,其中包括 BodyConfirmationHandlerBody 活动定义在工作流正常执行期间运行的可补偿的业务逻辑单元,CompensationHandler 活动定义用于补偿 Body 执行的工作的逻辑单元。当使用 Compensate 活动显式调用补偿或使用工作流的默认补偿逻辑隐式调用补偿时,将执行作为 CompensationHandler 指定的活动,并补偿 Body 活动的操作。如果未提供 CompensationHandler 活动,则会运行默认补偿逻辑,方法是:按相反的完成顺序补偿嵌套在 Body 中且已在 Body 中成功执行的所有 CompensableActivity 活动。有关补偿的更多信息,请参见补偿编程模型

另请参见

参考

CompensableActivity
Compensate