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)。 |