views:

298

answers:

3

I receive this error sporadically throughout the day. According to the stack, it's thrown during enlistment. If it were getting this error every time I'd be able to troubleshoot and fix (typically a firewall or LMHOSTS issue). Since it's randomly happening, I can't for the life of me think about what would do this.

Any ideas?

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()
A: 

Have you looked here, I reckon it's the first link on the #1 spot that may have the answer for you? (here), judging by it - it sounds like an authentication failure on the MSDTC. Here's another link that points to a blog about MSDTC and transactions.

Hope this helps, Best regards, Tom.

tommieb75
A: 

Usually you know right away that you've got a problem. Are there firewalls involved and have you configured the RPC port ranges? If so, I'm wondering if there could be a (slight) mismatch between the opened firewall ports and the RPC port range configuration. e.g. the RPC range has 1 port more than the firewall allows.

The RPC ports are assigned randomly and you mention that the error occurs randomly so that aspect matches. It would explain the intermittent problems since the issue would only occur when the one firewalled port was (randomly) chosen for the RPC communication.

Also, if clustered or load balanced verify that all servers are configured identically (and properly) -- maybe it's just one server that is having the issue.

Tuzo