【问题标题】:The MSDTC transaction manager was unable to push the transaction using AmbientTransactionMSDTC 事务管理器无法使用 AmbientTransaction 推送事务
【发布时间】:2017-02-19 19:40:26
【问题描述】:

我有一个 BizTalk 解决方案,它会调用一个存储过程来查询和更新表。显然,每次我在负载平衡服务器中测试我的解决方案时都会遇到此错误。

适配器未能传输要发送端口“SQLAdapter_Sendport”的消息,URL 为“mssql://server//StoredProc?”。将在为此发送端口指定的重试间隔后重新传输。

详情:System.Transactions.TransactionManagerCommunicationException:与底层事务管理器的通信失败。

System.Runtime.InteropServices.COMException:由于通信问题,MSDTC 事务管理器无法将事务推送到目标事务管理器。可能的原因是:存在防火墙并且它对 MSDTC 进程没有异常,两台机器无法通过它们的 NetBIOS 名称找到彼此,或者两个事务管理器之一未启用对网络事务的支持。

来自 HRESULT 的异常:0x8004D02A)
在 System.Transactions.Oletx.ITransactionShim.Export(UInt32 whereaboutsSize, Byte[] 下落, Int32& cookieIndex, UInt32& cookieSize, CoTaskMemHandle& cookieBuffer)
在 System.Transactions.TransactionInterop.GetExportCookie(Transaction transaction, Byte[] 行踪)
--- 内部异常堆栈跟踪结束 ---

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

DTC 也必须添加到 Windows 防火墙中。

最后,如果发送端口属性中的 useAmbientTransaction 设置为 True,我会一直遇到上述错误。

但如果我将 useAmbientTransaction 设置为 False,则消息在 SQL 中成功。

我在一些文章中读到,Microsoft 不建议将 useAmbientTransaction 设置为 False,尤其是在存储过程中涉及 Update 和 Delete 的情况下。但是我的解决方案在存储过程中使用了删除和更新,这就是为什么我需要将 useAmbientTransaction 设置为 True。但是,如果我这样做,我会不断遇到错误“MSDTC 事务管理器无法将事务推送到目的地...”

请为此提出任何可能的解决方案。

【问题讨论】:

  • 您要连接的数据库是否配置为始终在线可用性组的一部分?附言如果您的问题是与 BizTalk 相关的问题,则使用 biztalk 标记问题会有所帮助。

标签: biztalk distributed-transactions msdtc sqlbindparameter


【解决方案1】:

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

SQL Server 2014 的同一篇文章Cross-Database Transactions Not Supported For Database Mirroring or AlwaysOn Availability Groups (SQL Server)

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

【讨论】:

  • 感谢 Dijkgraaf 的回答。我确认我们的数据库正在使用 AlwaysOn 可用性组,所以我关闭了 useAmbientTransaction。
  • @Noel 如果我的回答解决了您的问题,那么您应该将其标记为答案(旁边的勾号)
猜你喜欢
  • 1970-01-01
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
相关资源
最近更新 更多