2016-10-11 71 views
0

我有一个BizTalk解决方案可以调用将查询和更新表的存储过程。显然,我每次在负载平衡的服务器上测试我的解决方案时遇到此错误。MSDTC事务管理器无法使用AmbientTransaction推送事务

适配器无法传输邮件将发送端口SQLAdapter_Sendport”与URL‘MSSQL:?//服务器// StoredProc’这将发送端口为这个指定的重试间隔后会重新

详细:System.Transactions.TransactionManagerCommunicationException:与基础事务管理器通信失败

System.Runtime.InteropServices.COMException:该MSDTC事务管理器无法推动交易到目的地事务管理器由于通信问题。可能的原因是:存在防火墙,并且它没有MSDTC进程的例外情况,两台计算机无法通过其NetBIOS名称找到彼此,或者没有为两个事务管理器之一启用对网络事务的支持。从HRESULT

例外:0x8004D02A)
在System.Transactions.Oletx.ITransactionShim.Export(UInt32的whereaboutsSize,字节[]下落,的Int32 & cookieIndex,UInt32的& cookieSize,CoTaskMemHandle & cookieBuffer)
在System.Transactions的。 TransactionInterop.GetExportCookie(交易成交,字节[]下落)内部异常堆栈跟踪的
- 完 -

我读过一些文章,我应该设置DTC属性BEL流。这些我已经在BizTalk和SQL Server中设置了。

enter image description here

另外,DTC必须在Windows防火墙中添加。

enter image description here

最后一点,如果在发送端口属性useAmbientTransaction设置为True我一直遇到上面所说的错误。

enter image description here

但如果我设置useAmbientTransaction为False的消息在SQL成功。

我读过一些文章,微软不建议将useAmbientTransaction设置为False,特别是如果Update和Delete涉及存储过程。但我的解决方案使用存储过程中的删除和更新,这就是为什么我需要将它设置为useAmbientTransaction为True。但如果我这样做,我一直遇到错误“MSDTC交易管理器无法推动交易到目的地...”

请建议任何可能的解决方案。

+0

同一篇文章是要连接到配置部分的总是可用性组数据库?附:如果你用biztalk标记你的问题,如果他们是BizTalk相关的问题,它会有所帮助。 – Dijkgraaf

回答

0

如果要连接到AlwaysOn可用性组中的数据库,则需要关闭useAmbientTransaction,因为AlwaysOn不支持除SQL Server 2016以外的MSDTC。

为SQL Server 2014 Cross-Database Transactions Not Supported For Database Mirroring or AlwaysOn Availability Groups (SQL Server)

VS

的SQL Server 2016 Cross-Database Transactions and Distributed Transactions for Always On Availability Groups and Database Mirroring (SQL Server)

+0

谢谢你Dijkgraaf的答案。我验证了我们的数据库正在使用AlwaysOn可用性组,因此我关闭了useAmbientTransaction。 – Artline157

+0

@Nelel如果我的答案解决了您的问题,那么您应该将其标记为答案(旁边的刻度线标记) – Dijkgraaf