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 clerk 上实现,由 CRM 辅助角色用来将日志记录写入日志。 它还可由 CRM 补偿程序使用。
  • ICrmCompensatorICrmCompensatorVariants 在 CRM 补偿器上实现。 这些接口用于将事务结果通知及其关联的日志记录传递到 CRM 补偿器。 通常,CRM 补偿器将仅实现其中一个接口,具体取决于它是否需要非结构化或结构化日志记录。 结构化日志记录是构建为 Variants 集合且通常供 Microsoft Visual Basic使用的日志记录。 非结构化日志记录只是字节缓冲区,通常供Microsoft Visual C++使用。 CRM 补偿器可以实现这两个补偿器接口;但是,一次只能使用一个记录传送日志记录。
  • COM+ CRM 监视接口用于监视特定服务器应用程序中的 CRM。 有关监视接口的详细信息,请参阅 COM+ CRM 监视接口

本节中的以下主题提供有关 COM+ CRM 服务的更多详细信息:

COM+ 补偿资源管理器任务