我有两个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测试失败
我尝试过的事情:
任何人都有什么建议可以解决这个问题?
由于
答案 0 :(得分:0)
原来问题是关于事务管理器通信设置。默认情况下,MSDTC启用了“需要相互身份验证”,但这两台计算机无法使用默认的“ NT AUTHORITY \ NetworkService ”帐户进行身份验证。解决方案是在两台机器上创建一个用户,使其能够进行身份验证,或者更简单地说,只需选择“无需身份验证”即可。应用此设置,重新启动服务及其工作!
答案 1 :(得分:0)
原来,在我们的案例中,需要在App Server和SQL机器上打开端口135(RPC),以便MSDTC将MSDTC对象从SQL发送到客户端。
如果您仍有问题,可能是因为DTC正在选择1024到65535之间的端口。因此,只需允许每个App \ SQL中的Amazon EC2“入站规则”允许来自其他服务器。