COM+ 补偿资源管理器概念

可以使用 COM+ 补偿资源管理器 (CRM),轻松便捷地将应用程序资源与 Microsoft 分布式事务处理协调器 (DTC) 事务集成。 应用程序资源可对事务处理结果进行投票,并可收到其结果的最终通知。 生成持久日志是为了让应用程序资源能够写入在失败后留存的记录,而 CRM 会在应用程序重启时恢复该日志文件。

CRM 由以下两个组件组成:

  • CRM 工作器。 此组件执行特定 CRM 的主要工作,并实现其所需执行任务的特定接口。 CRM 基础结构为 CRM 工作器提供了一个接口,CRM 工作器可通过该接口将记录写入磁盘上的持久日志文件。 CRM 工作器在执行工作之前必须将记录写入日志并使其持久保留,以便在发生崩溃时能够正确进行恢复。 CRM 工作器始终需要一个事务。
  • CRM 补偿器。 此组件由 CRM 基础结构在事务完成时创建。 它实现了一个已定义的接口,CRM 基础结构可通过该接口来传递事务完成通知以及 CRM 工作器先前写入的日志记录。

COM+ CRM 提供事务通知的原子性和 CRM 日志的持久性,但不提供资源隔离。 在多线程环境中,CRM 开发人员有责任确保多个 CRM 工作器或外部应用程序对资源的访问在事务中进行了序列化。

在事务通过准备阶段后,CRM 补偿器和 CRM 工作器可以同时运行。 当上一个事务的 CRM 补偿器仍在处理上一个事务时,新事务的 CRM 工作器组件有可能处于活动状态。

在 CRM 服务器应用程序恢复之前的故障期间,中断的事务应视为活动但未完成的事务。 在 CRM 服务器进程恢复之前,外部进程不可能访问被该特定事务更改的资源。

CRM 为基本 CRM 功能定义了三种接口类型:

  • ICrmLogControl 在 CRM 分配器上实现,由 CRM 工作器用于将日志记录写入日志。 它还可以供 CRM 补偿器使用。
  • ICrmCompensatorICrmCompensatorVariants 是在 CRM 补偿器上实现的。 这些接口用于向 CRM 补偿器发送交易结果通知及其相关日志记录。 通常,CRM 补偿器只会实现其中一个接口,具体取决于它是否需要非结构化或结构化日志记录。 结构化日志记录是作为 Variants 集合构建的日志记录,通常供 Microsoft Visual Basic 使用。 非结构化日志记录只是一个字节缓冲区,通常供 Microsoft Visual C++ 使用。 一个 CRM 补偿器可以实现两个补偿器接口,但每次只能使用一个接口来传送日志记录。
  • COM+ CRM 监视接口用于监视特定服务器应用程序中的 CRM。 有关监视接口的详细信息,请参阅 COM+ CRM 监视接口

本节的以下主题将详细介绍 COM+ CRM 服务:

COM+ 补偿资源管理器任务