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