大多数 BizTalk Server 运行时操作都需要 Microsoft 分布式事务处理协调器 (MSDTC) 的支持,以确保操作的事务一致性。 如果 MSDTC 事务支持不可用,则相关的 BizTalk Server 运行时操作无法继续。 通常受影响的 BizTalk 组件包括(但不限于)单一 Sign-On 服务、BizTalk 主机实例以及 BizTalk Server 所连接的任何 SQL Server 实例,这些都可能由于未正确配置 MSDTC 事务支持而受到影响。 本部分包含描述 MSDTC 相关错误的信息,并提供诊断和解决 MSDTC 问题的步骤。
如果 MSDTC 事务支持配置不正确,可能会发生错误。
在 BizTalk 环境中未正确配置 MSDTC 事务支持时,BizTalk Server 上可能会出现类似于以下内容的错误:
“Microsoft分布式事务处理协调器问题阻止了与配置数据库的连接。 事务管理器已禁用对远程/网络事务的支持”。
“Microsoft分布式事务处理协调器问题阻止了与配置数据库的连接。 事务已被隐式或显式提交或中止。
“错误代码:0x8004d00a,新事务无法在指定的事务协调器中登记”。
“无法从配置存储中检索接收位置”MySample ReceiveLocation“的传输类型数据。 主 SSO 服务器“MyServer”失败。 RPC 服务器不可用”。
“错误代码:0x8004d025,合作伙伴事务管理器已禁用对远程/网络事务的支持”。
“错误代码:0xc0002a24,无法导入 DTC 事务。 请检查 MSDTC 是否已正确配置用于远程操作。
“0x8004d01c
[0x1705] 创建内部工作项失败。
确保 SQL Server 正在运行。
若要解决 MSDTC 配置错误,请执行以下步骤。
确保 BizTalk Server 和远程服务器之间的 NetBIOS 名称解析成功
计算机之间的成功 MSDTC 事务要求客户端计算机能够将服务器计算机的 NetBIOS 名称解析为正确的 IP 地址,服务器计算机能够将客户端计算机的 NetBIOS 名称解析为正确的 IP 地址。 若要验证 NetBIOS 名称解析是否适用于两个方向(客户端到服务器和服务器到客户端),请执行以下步骤:
注释
NetBIOS 名称也称为 网络 名称。
确定每台计算机的 NetBIOS 名称:
右键单击 “我的计算机 ”以显示 “系统属性 ”对话框,然后单击“ 计算机名称 ”选项卡以查看分配给计算机的 全计算机名称 。
NetBIOS 名称是指定为 完整计算机名称 的第一部分,例如,如果 完整计算机名称 列为 myserver.company.___domain.com,则计算机的 NetBIOS 名称为 myserver。
确定与每台计算机关联的 IP 地址或地址:
在客户端计算机上启动命令提示符,键入以下命令,然后按 Enter:
ipconfig /all
命令提示符窗口中列出了与客户端计算机关联的 IP 地址或地址。
在服务器计算机上启动命令提示符,键入以下命令,然后按 Enter:
ipconfig /all
与服务器计算机关联的 IP 地址或地址列在命令提示符窗口中。
验证每台计算机的 NetBIOS 名称是否解析为与计算机关联的 IP 地址之一:
在客户端计算机上启动命令提示符,键入以下命令,然后按 Enter:
ping <NetBIOS name of server computer>
ping 命令的结果应返回与服务器计算机关联的 IP 地址。
在服务器计算机上启动命令提示符,键入以下命令,然后按 Enter:
ping <NetBIOS name of client computer>
ping 命令的结果应返回与客户端计算机关联的 IP 地址。
验证与每台计算机上的 NetBIOS 名称关联的 IP 地址的反向名称查找是否解析为正确的计算机名称。
在客户端计算机上启动命令提示符,键入以下命令,然后按 Enter:
ping -a <IP Address associated with client computer NetBIOS name>
ping 命令的结果应返回与步骤 3a 中使用的 NetBIOS 名称相对应的 NetBIOS 名称或完全限定的域名。 如果返回的名称与步骤 3a 中使用的 NetBIOS 名称不匹配或对应,则 IP 地址反向查找将失败,这可能导致 MSDTC 事务失败。
在服务器计算机上启动命令提示符,键入以下命令,然后按 Enter:
ping -a <IP Address associated with server computer NetBIOS name>
ping 命令的结果应返回与步骤 3b 中使用的 NetBIOS 名称相对应的 NetBIOS 名称或完全限定的域名。 如果返回的名称与步骤 3b 中使用的 NetBIOS 名称不匹配或对应,则 IP 地址反向查找将失败,这可能导致 MSDTC 事务失败。
如果 NetBIOS 名称解析在任何一个方向上都未成功,或者如果反向名称查找失败,则在 DNS 服务器、NetBIOS 名称服务器、HOSTS 文件或 LMHOSTS 文件中进行相应的设置以更正问题。
注释
计算机使用的名称解析方法因计算机的 NetBIOS 节点类型而异。 有关 NetBIOS 节点类型的详细信息,请参阅 NetBIOS 名称解析。
确保 BizTalk Server 和远程服务器之间的防火墙不会阻止 RPC 动态端口分配所需的端口
网络上的 MSDTC 功能取决于网络上的 RPC 功能。 通过防火墙的 RPC 功能要求打开特定端口以适应 RPC 动态端口分配。 如果 BizTalk Server 和远程服务器之间已建立防火墙,请按照 “如何配置 RPC 动态端口分配来兼容防火墙” 中的步骤进行操作,以便让 RPC 动态端口分配在防火墙环境下正常运行。
设置适当的 MSDTC 安全配置选项
Windows 提供安全增强功能,用于控制如何通过网络访问 MSDTC。 通过修改 MSDTC 安全设置,可以控制 MSDTC 如何通过网络与远程计算机通信。 下表列出了配置 MSDTC 安全设置时可用的选项的建议值:
配置选项 | 默认值 | 建议的值 |
---|---|---|
网络 DTC 访问 | 禁用 | 已启用 |
客户端和管理 | ||
允许远程客户端 | 禁用 | 禁用 |
允许远程管理 | 禁用 | 禁用 |
事务管理器通信 | ||
允许入站 | 禁用 | 已启用 |
允许出站 | 禁用 | 已启用 |
要求进行相互身份验证 | 已启用 | 如果所有远程计算机都运行 Windows Server 2003 SP1 或 Windows XP SP2 或更高版本,并且配置为“需要相互身份验证”,则该功能将被启用。 |
要求对呼叫方进行身份验证 | 禁用 | 如果在群集上运行 MSDTC,则启用。 |
不要求进行身份验证 | 禁用 | 如果远程计算机是早于 Windows Server 2003 SP1 或早于 Windows XP SP2 的版本,则启用。 |
启用 TIP | 禁用 | 如果运行 BAM 门户,则启用。 |
启用 XA 事务 | 禁用 | 如果与基于 XA 的事务系统通信(例如,在使用 MQSeries 适配器与 IBM WebSphere MQ 通信时),则启用。 |
应用这些更改后,MSDTC 服务将重新启动。
若要访问 MSDTC 安全配置选项,请执行以下步骤:
单击“ 开始”,单击“ 运行”,然后键入 dcomcnfg 以启动 组件服务管理控制台。
单击以展开 组件服务 ,然后单击以展开 计算机。
单击以展开 “我的计算机”,单击以展开 “分布式事务处理协调器”,右键单击“ 本地 DTC”,然后单击“ 属性”。
单击“本地 DTC 属性”对话框的“安全”选项卡。
注释
根据所做的更改,可能需要重新启动计算机才能执行更改。 如果在应用更改并重启 MSDTC 服务后仍遇到问题,请重新启动进行更改的计算机,以确保更改生效。
如果启用了需要相互身份验证或需要传入调用方身份验证配置选项,必须向客户端计算机帐户授予通过网络访问此计算机的用户权限。 如果未向客户端计算机的计算机帐户授予 从网络访问此计算机 用户权限,或者包含在 拒绝从网络访问此计算机 用户权限中,则客户端和服务器计算机之间的 DTC 通信将失败。
默认设置是向“每个人”组授予 从网络用户权限访问此计算机 的权限。 因此,除非修改了默认设置,否则不需要更改此用户权限。 如果启用了 “不需要身份验证 ”配置选项,则 从网络用户权限访问此计算机 不适用于客户端计算机帐户。
若要更改授予“从网络访问此计算机”用户权限的用户或组,请执行以下步骤:
单击“ 开始”,单击“ 运行”,键入 Gpedit.msc,然后单击“ 确定”。
展开“本地计算机策略”列表中的以下项:
“计算机配置”
Windows 设置
安全设置
本地策略
单击“用户权限分配”。
双击 “从网络访问此计算机”,然后单击“ 添加用户或组”。
单击 “对象类型”,选择“ 计算机 ”,然后单击“ 确定”。
在 “输入对象名称” 中选择区域中添加计算机名或组名称。
单击 “检查名称 ”以验证条目。
单击确定两次。
若要从网络用户权限更改 “拒绝访问此计算机 ”中包含的用户或组,请执行以下步骤:
依次展开“本地计算机策略”列表中的以下项:
“计算机配置”
Windows 设置
安全设置
本地策略
单击“用户权限分配”。
双击“ 拒绝从网络访问此计算机”,然后单击以选择要从此用户中删除的计算机名或组。
单击“ 删除 ”,然后单击“ 确定”。
为 EnableAuthEpResolution 和 RestrictRemoteClients 选项设置适当的值
Windows 通过要求对 RPC 接口进行身份验证的调用来提高安全性。 此功能可通过 EnableAuthEpResolution 和 RestrictRemoteClients 注册表项进行配置。 若要确保远程计算机能够访问 RPC 接口,请执行以下步骤:
警告
不正确使用注册表编辑器可能会导致问题,进而需要您重新安装操作系统。 请慎用注册表编辑器,风险自负。 有关如何备份、还原和修改注册表的详细信息,请参阅 Microsoft Windows 注册表的说明中的Microsoft知识库文章“Microsoft Windows 注册表的说明”。
单击“ 开始”,单击“ 运行”,键入 regedit.exe,然后单击“ 确定 ”以启动注册表编辑器。
导航到 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT
在 RPC 密钥下,使用指示的值创建以下 DWORD 条目。 如果 RPC 密钥不存在,则必须创建它。
DWORD 条目 默认值 建议的值 EnableAuthEpResolution 0(禁用) 1 限制远程客户端 1 (已启用) 0 关闭注册表编辑器。
重启 MSDTC 服务。
注释
根据所做的更改,可能需要重新启动计算机才能执行更改。 如果在应用更改并重启 MSDTC 服务后仍遇到问题,请重新启动进行更改的计算机,以确保更改生效。
如果 Windows 防火墙正在运行,请为 MSDTC 服务添加异常
Windows 防火墙服务可能会阻止计算机之间的 MSDTC 通信。 若要确保计算机之间不会阻止 MSDTC 通信,请在 Windows 防火墙服务运行时将 msdtc.exe 添加到 Windows 防火墙例外列表中。
单击“ 开始”,单击“ 运行”,键入 firewall.cpl,然后单击“ 确定 ”以显示 Windows 防火墙 对话框。
单击“ 允许程序通过 Windows 防火墙 显示 Windows 防火墙设置 ”对话框。
单击“Windows 防火墙设置”对话框的“例外”选项卡。
单击“ 添加程序 ”以显示“ 添加程序 ”对话框。
单击“ 浏览 ”并导航到 %system32%\msdtc.exe 。
注释
启动命令提示符,输入 echo %system32%,然后按 Enter 以确定此计算机上 \System32 目录的位置。
单击以选择 msdtc.exe,然后单击“打开”。
单击“ 更改范围 ”以指定应允许 MSDTC 通信的计算机集,然后单击“ 确定”。
在“添加程序”对话框中单击“确定”,然后在“Windows 防火墙设置”对话框中单击“确定”。
关闭 “Windows 防火墙 ”对话框。
停止并重启分布式事务处理协调器服务。
启动命令提示符,键入 net stop msdtc ,然后按 Enter。
分布式事务处理协调器服务停止后,键入 net start msdtc ,然后按 Enter。
使用 DTCTester 或 DTCPing 通过网络验证 MSDTC 功能
如果 SQL Server 安装在其中一台计算机上,请使用 Test-Dtc cmdlet 验证两台计算机之间的事务支持。 有关详细信息,请转到 Windows PowerShell:Test-Dtc。
如果未在任一计算机上安装 SQL Server,请使用 DTCPing 验证两台计算机之间的事务支持。 DTCPing 工具必须在客户端和服务器计算机上运行,并且当 SQL Server 未安装在任一计算机上时,DTCTester 实用工具是一个很好的替代方法。 有关 DTCPing 的详细信息,请参阅 如何排查 MS DTC 防火墙问题 ,并配置 Microsoft 分布式事务处理协调器 (DTC) 以通过防火墙。
重要
如果 DTCPing 返回警告“警告:两个测试计算机的 CID 值相同”,请按照“ 确保为 MSDTC 分配唯一的 CID 值 以容纳测试计算机之间的适当 MSDTC 功能”部分中的步骤。
确保为 MSDTC 分配唯一的 CID 值
Windows作系统的 MSDTC 功能需要唯一的 CID 值,以确保计算机之间的 MSDTC 功能正常工作。 Windows 安装的磁盘重复映像必须具有唯一的 CID 值,否则 MSDTC 功能可能会受损。 使用虚拟硬盘将作系统部署到虚拟机时,可能会发生这种情况。
若要确定运行 Windows作系统的计算机的 MSDTC CID 值是否唯一,请检查两台计算机上 HKEY_CLASSES_ROOT\CID 注册表项下条目的值。 如果每台计算机上的这些值不唯一,请参照步骤 在其他故障排除步骤未成功时,考虑重新安装分布式事务处理协调器服务 以在其中一台计算机上重新安装 MSDTC,这将为该计算机生成唯一的 MSDTC CID 值,并确保 MSDTC 正常运行。
如果客户端计算机与服务器计算机之间的 MSDTC 连接关闭,则会发生错误“新事务无法在指定的事务协调器(0x8004d00a)中登记”
在某些情况下,客户端和服务器之间的现有 MSDTC 连接可能会关闭,后续尝试使用此连接将导致以下错误消息:新事务无法在指定的事务协调器(0x8004d00a)中登记。有关详细信息,请在 尝试在 MS DTC 中启动事务时,转到新事务无法在指定的事务协调器中登记。
如果其他故障排除步骤未成功,请考虑重新安装分布式事务处理协调器服务
如果对 MSDTC 问题的其他解决尝试未取得成功,可以考虑卸载并重新安装 MSDTC。 按照以下步骤卸载并重新安装 MSDTC:
以管理员身份打开命令提示符。
在命令提示符下,键入以下内容以卸载分布式事务处理协调器服务:
msdtc -uninstall
在命令提示符下,键入以下内容以安装分布式事务处理协调器服务:
msdtc –install
重要
重新安装 MSDTC 可能会更改分布式事务处理协调器服务的默认行为。 重新安装 MSDTC 后,请按照以下步骤作,确保分布式事务处理协调器服务正常工作:
- 重新安装 MSDTC 可能会将 MSDTC 安全配置选项重置回默认值。 在重新安装 MSDTC 后,验证 MSDTC 安全配置选项是否已设置为适当的值。
- 重新安装 MSDTC 可能会更改分布式事务处理协调器服务的 启动类型 值。 在重新安装 MSDTC 后,验证分布式事务处理协调器服务的 启动类型 值是否设置为 “自动 ”。
- 重新安装 MSDTC 可能需要重启计算机。 若要确保分布式事务处理协调器服务正常工作,请在重新安装 MSDTC 后重启计算机。