COM+ CRM 监视接口

CRM 基础结构提供一组接口,可用于监视特定服务器应用程序中的 CRM。 若要访问监视接口,服务器应用程序中运行的组件必须首先创建一个名为 CRM 恢复分配器的专用 CRM 分配器。

在正常使用 CRM 时,事务应为短期事务,因此 CRM 工作器和 CRM 补偿程序存在很短的时间,通常最多只有几秒钟。 因此,监视接口旨在提供在特定时间点执行 CPM 的状态快照。 如果任一 CPM 出现问题,则监视接口可用于了解异常 CRM,以检查其日志记录,并根据需要中止其事务。

以下是三个 CRM 监视接口及其工作原理的说明。

接口 说明
ICrmMonitor
使用 ICrmMonitor::GetClerks,可以获取服务器应用程序中当前一组活动 CRM 分配器的快照。 由此,可以定位和查询相关的特定 CRM 分配器集合对象,包括其事务的当前状态以及 CRM 写入的日志记录。
监视工具确定相关的分配器时会调用 ICrmMonitor::HoldClerk 以获取该特定分配器上的 ICrmMonitorLogRecords 接口。 此时,监视工具将保留对该分配器的引用,如果事务完成,则分配器保存在内存中,直到监视工具完成才释放。
ICrmMonitorClerks
使用此接口,可以浏览分配器集合对象,以获取有关获取分配器集合时的状态信息。 此信息包括分配器数、分配器使用的 CRM 补偿程序的 ProgID、注册 CRM 补偿程序时提供的说明(使用 ICrmLogControl::RegisterCompensator)、事务工作单元 ID 和活动 ID。 单个分配器也由“分配器实例 CLSID”唯一标识,它不是术语通常意义上的 COM CLSID,而是标识此特定分配器的生存期的唯一 GUID。
ICrmMonitorLogRecords
此接口可用于查询事务的当前状态、了解此 CRM 分配器已写入的日志记录数以及获取实际日志记录数据。 日志记录使用最初使用 ICrmLogControl 写入的格式从 ICrmMonitorLogRecords 接口提供。 此外,还可以选择实现 ICrmMonitorLogRecords 以将日志记录转换为可查看格式,以便使用通用监视工具进行呈现。
由于 ICrmMonitorLogRecords 直接在 CRM 分配器上实现,因此可以将 QueryInterface 用于 ICrmLogControl(也可以在 CRM 分配器上实现)。 然后,如果需要,这可用于直接中止事务 (ICrmLogControl::ForceTransactionToAbort)。

COM+ 补偿资源管理器概念