2

我有两个 EC2 实例,一个在 IIS 中运行网站,另一个托管 SQL-Server 实例。网站与此服务器的通信正常,可以毫无问题地从数据库中提取数据。但是,当我去编写一组数据时,我使用的是 DTC,这给我带来了问题。当我尝试写入(并因此包含在事务中)时,我收到以下错误消息:

由于通信问题,MSDTC 事务管理器无法从源事务管理器中提取事务。可能的原因是:存在防火墙并且它对 MSDTC 进程没有异常,两台机器无法通过它们的 NetBIOS 名称找到彼此,或者两个事务管理器之一未启用对网络事务的支持。(来自 HRESULT 的异常:0x8004D02B)。

如果我从 SQL 实例运行 DTCPing.exe 到 IIS 实例,我会得到以下结果:

09-20, 12:19:12.861-->开始 RPC 测试 (-->WIN-I9MDBIKCVAD) 问题: 在 dtcping.cpp @303 调用远程 RPC 方法错误(0x6BA) --> RPC ping 异常 --> 1722(RPC 服务器不可用。) RPC 测试失败

我尝试过的事情:

  • 确保在两台服务器上使用的 IAM 安全组设置中允许使用端口 3372
  • 尝试在安全组设置中启用“所有 TCP”和“所有 UDP”
  • 将另一台机器的 net bios 名称的主机文件条目添加到为每个实例设置的弹性 IP 确保在两台服务器上都启用并配置了 MSDTC
  • 确保 RPC 服务在两台机器上运行

有人对可能导致此问题的原因有任何建议吗?

谢谢

4

2 回答 2

0

原来问题与事务管理器通信设置有关。默认情况下,MSDTC 启用“需要相互身份验证”,但两台机器无法使用默认的“ NT AUTHORITY\NetworkService ”帐户进行身份验证。解决方案是在两台机器上创建一个用户,使其能够进行身份验证,或者更简单地说,只需选择“不需要身份验证”。应用此设置,重新启动服务及其工作!

于 2013-09-25T07:49:44.563 回答
0

事实证明,在我们的例子中,需要在 App Server 和 SQL 机器上打开端口 135 (RPC),以便 MSDTC 将 MSDTC 对象从 SQL 发送到客户端。

如果您仍然有问题,那可能是因为 DTC 在 1024 和 65535 之间选择了一个端口。因此,只需在每个 App\SQL 中允许您的 Amazon EC2“入站规则”以允许来自其他服务器。

于 2016-07-28T11:06:46.687 回答