TransactionManagerCommunicationException when transaction is escalated

A

Alex R

Hello,

I have an application which uses the System.Transactions.TransactionScope
class to manage transactions. Transactions are often escalated to
distributed transactions, and normally this works fine. With one particular
installation I have a problem where as soon as the transaction is escalated
I get the following error:

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.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()

I have tried using DTCPing to check the link between the machine and the
database server and the finds no problems.

Help!
 
A

Alex R

I found out what the problem was, so I thought I'd write a reply.

The problem machine had been built to replace another machine called
INTTEST641 which had developed some weird problems and would no longer pass
Windows credentials to the SQL server. The new machine was called
INTTEST641-3. Distributed Transaction Co-ordinator worked OK while the
machine was called INTTEST641-3, but once I renamed it to INTTEST641 it
stopped working. I don't think it was just the fact that I renamed the
machine that caused the problem, I think it was renaming to a name that had
previously existed on the domain. I did the same again, and I got exactly
the same problem!

It's working now, but I am not that impressed with DTC.

Alex R said:
Hello,

I have an application which uses the System.Transactions.TransactionScope
class to manage transactions. Transactions are often escalated to
distributed transactions, and normally this works fine. With one
particular installation I have a problem where as soon as the transaction
is escalated I get the following error:

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.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()

I have tried using DTCPing to check the link between the machine and the
database server and the finds no problems.

Help!
 
S

scottwilliamwelbourn

I found out what the problem was, so I thought I'd write a reply.

The problem machine had been built to replace another machine called
INTTEST641 which had developed some weird problems and would no longer pass
Windows credentials to the SQL server.  The new machine was called
INTTEST641-3.  DistributedTransactionCo-ordinator worked OK while the
machine was called INTTEST641-3, but once I renamed it to INTTEST641 it
stopped working.  I don't think it was just the fact that I renamed the
machine that caused the problem, I think it was renaming to a name that had
previously existed on the domain.  I did the same again, and I got exactly
the same problem!

It's working now, but I am not that impressed with DTC.




I have an application which uses the System.Transactions.TransactionScope
class to manage transactions.  Transactions are often escalated to
distributed transactions, and normally this works fine.  With one
particular installation I have a problem where as soon as thetransaction
is escalated I get the following error:
System.Transactions.TransactionManagerCommunicationException:
Communicationwith theunderlyingtransactionmanagerhasfailed. --->
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.GetOletxTransactionFromTransmitterPr­opigationToken(Byte[]
propagationToken)
  --- End of inner exception stack trace ---
  at
System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPr­opigationToken(Byte[]
propagationToken)
  at
System.Transactions.TransactionStatePSPEOperation.PSPEPromote(InternalTrans­action
tx)
  at
System.Transactions.TransactionStateDelegatedBase.EnterState(InternalTransa­ction
tx)
  at System.Transactions.EnlistableStates.Promote(InternalTransaction tx)
  at System.Transactions.Transaction.Promote()
  at
System.Transactions.TransactionInterop.ConvertToOletxTransaction(Transactio­n
transaction)
  at System.Transactions.TransactionInterop.GetExportCookie(Transaction
transaction, Byte[] whereabouts)
  at System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction
tx)
  at System.Data.SqlClient.SqlInternalConnection.Enlist(Transactiontx)
  at System.Data.SqlClient.SqlInternalConnectionTds.Activate(Transaction
transaction)
  at
System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transactio­n
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()
I have tried using DTCPing to check the link between the machine and the
database server and the finds no problems.
Help!- Hide quoted text -

- Show quoted text -

How did you fix the problem? Manual registry entry? Changed MS DTC
Authentication? Ran a netsh command on a firewall? Opened up a
firewall port? Did you disable the transactional coordinator by
setting "Enlist=false" in the connection string? Did you change any
settings on the server? Did you rebuild the machine and give it a name
that had not existed on the domain?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top