使MSDTC跨两个EC2实例工作

时间:2013-09-20 12:28:33

标签: amazon-ec2 msdtc

我有两个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 pinging异常    - > 1722(RPC服务器不可用。)RPC测试失败

我尝试过的事情:

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

任何人都有什么建议可以解决这个问题?

由于

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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