ICrmLogControl::RegisterCompensator 方法 (comsvcs.h)
CRM 辅助角色使用此方法将 CRM 补偿器注册到 CRM 基础结构。 它必须是 CRM 辅助角色调用的第一个方法,并且只能成功调用一次。 如果 CRM 辅助角色在调用此方法时收到“正在恢复”错误代码,则应再次调用此方法,直到收到成功为止。
语法
HRESULT RegisterCompensator(
[in] LPCWSTR lpcwstrProgIdCompensator,
[in] LPCWSTR lpcwstrDescription,
[in] LONG lCrmRegFlags
);
参数
[in] lpcwstrProgIdCompensator
CRM 补偿器的 ProgId。 也接受字符串形式的 CRM 补偿器的 CLSID。
[in] lpcwstrDescription
监视接口要使用的说明字符串。
[in] lCrmRegFlags
CRMREGFLAGS 枚举中的标志,这些标志控制 CRM 补偿器应接收事务完成的阶段,以及尝试恢复后仍存在不确定的事务时,恢复是否应失败。
返回值
此方法可以返回以下值。
返回代码 | 说明 |
---|---|
|
该方法已成功完成。 |
|
NULL 指针作为参数提供。 |
|
发生意外错误。 |
|
创建 CRM clerk 的组件没有事务。 |
|
CRM 日志文件的恢复仍在进行中。 |
|
恢复 CRM 日志文件失败,因为存在可疑事务。 |
|
调用此方法时处于错误状态;在 RegisterCompensator 之前或事务完成 (CRM 辅助角色) 。 |
|
发生内存不足错误。 |
|
CRM 补偿器不支持至少一个必需的接口 (ICrmCompensator 或 ICrmCompensatorVariants) 。 |
注解
lCrmRegFlags 参数使实施者能够决定 CRM 补偿器要接收的事务完成阶段。 某些 CRM 补偿器可能在准备阶段不执行任何工作,因此无需接收准备通知;它可以提高性能,以指定在这种情况下不需要准备阶段。
建议将 CRM 辅助角色和 CRM 补偿器开发为“两者”线程组件, (线程模型 = 任何单元) 。 但是,在某些情况下,由于语言限制 ((例如,使用 Visual Basic) 开发 CRM 时),可能无法实现此操作。 单元线程 CRM 补偿器 (线程模型 = 单线程单元) 将在准备阶段死锁,除非其同步属性设置为“不支持”。 单元线程 CRM 补偿器的另一种替代方法是跳过准备阶段(如果没有必要)。
在具有多个分布式事务处理协调器 (DTC) 的情况下,DTC 事务可能会进入不确定状态。 通常,这是因为事务期间发生了中断,并且无法联系事务的发起人来了解事务的结果。 在这种情况下,CRM 基础结构无法确定事务的结果。 在这种情况下,CRM 实施者可以决定是否应允许新事务。
“如果存在疑问,则失败”标志的使用方式如下:通过在 RegisterCompensator 上指定“如果存在疑问,则失败”标志,如果恢复后仍保留有疑问的事务,则对 RegisterCompensator 的调用将失败并显示“恢复失败”错误代码。 如果未指定“如果存在疑问,则失败”标志,则恢复成功,允许新事务,并将有疑问的事务保留在 CRM 日志文件中。 当应用程序服务器进程重启) 时,CRM 基础结构会尝试在下一个恢复 (再次解决这些不确定事务。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | comsvcs.h |