导致此MS DTC错误在.NET中偶尔发生的原因是什么?

时间:2009-12-08 23:29:59

标签: .net sql-server sql-server-2005 transactions msdtc

我整天都偶尔收到这个错误。根据堆栈,它在征兵期间被抛出。如果每次我能够进行故障排除和修复(通常是防火墙或LMHOSTS问题)时都会收到此错误。由于它是随机发生的,我不能为我的生活考虑会做什么。

有什么想法吗?

System.Transactions.TransactionManagerCommunicationException: Communication with the underlying transaction manager has failed. ---> System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.

   at System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize, Byte[] propgationToken, IntPtr managedIdentifier, Guid& transactionIdentifier, OletxTransactionIsolationLevel& isolationLevel, ITransactionShim& transactionShim)

   at System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(Byte[] propagationToken)

   --- End of inner exception stack trace ---

   at System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(Byte[] propagationToken)

   at System.Transactions.TransactionStatePSPEOperation.PSPEPromote(InternalTransaction tx)

   at System.Transactions.TransactionStateDelegatedBase.EnterState(InternalTransaction tx)

   at System.Transactions.EnlistableStates.Promote(InternalTransaction tx)

   at System.Transactions.Transaction.Promote()

   at System.Transactions.TransactionInterop.ConvertToOletxTransaction(Transaction transaction)

   at System.Transactions.TransactionInterop.GetExportCookie(Transaction transaction, Byte[] whereabouts)

   at System.Data.SqlClient.SqlInternalConnection.GetTransactionCookie(Transaction transaction, Byte[] whereAbouts)

   at System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction tx)

   at System.Data.SqlClient.SqlInternalConnection.Enlist(Transaction tx)

   at System.Data.SqlClient.SqlInternalConnectionTds.Activate(Transaction transaction)

   at System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction)

   at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)

   at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)

   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)

   at System.Data.SqlClient.SqlConnection.Open()

3 个答案:

答案 0 :(得分:0)

你看过here,我认为这是#1地点的第一个可能有答案的链接? (here),从它判断 - 它听起来像MSDTC上的身份验证失败。这是另一个link指向关于MSDTC和交易的博客。

希望这有帮助, 最好的祝福, 汤姆。

答案 1 :(得分:0)

答案 2 :(得分:0)

通常你马上知道你有问题。是否涉及防火墙并且您是否配置了RPC端口范围?如果是这样,我想知道打开的防火墙端口和RPC端口范围配置之间是否存在(轻微)不匹配。例如RPC范围比防火墙允许的端口多1个端口。

RPC端口是随机分配的,您提到错误是随机发生的,因此方面匹配。它可以解释间歇性问题,因为问题只会在(随机)为RPC通信选择一个防火墙端口时发生。

此外,如果群集或负载平衡验证所有服务器配置相同(并且正确) - 可能只是一个服务器遇到问题。