DTC Stopped working and no longer can be connected to

N

Neil M. Johnson

Our server has been running for 20 days in a row. On Wednesday morning DTC transactions no longer worked with the server. This has happened in the past, usually after Microsoft applies patches. It is a simple fix to change the settings back to what they should be and restart the DTC and everything works again. After the most recent set of changes, this is no longer the case. The Application starts a transaction, then connects to the SQL Server database (2008) on the server and gets the following message.

1514546.png

This is happening on several machines that connect to the server running both Windows 7 and Windows 10. We have stopped and started the DTC on each local machine as well as rebooted the server with no affect. The detailed error message shows the following:

DefaultSource Error 2 Communication with the underlying transaction manager has failed.
Exception TransactionManagerCommunicationException, Form Maintain Mortgages, Procedure LoadMortgage - 13/12/2019 12:06:03 PM
Additional Info: MortgageID: 2707
DefaultSource Information 0 Inner Exception:
DefaultSource Error 2 The MSDTC transaction manager was unable to pull the transaction from the source transaction manager due to communication problems. Possible causes are: a firewall is present and it doesn't have an exception for the MSDTC process, the two machines cannot find each other by their NetBIOS names, or the support for network transactions is not enabled for one of the two transaction managers. (Exception from HRESULT: 0x8004D02B) TransactionManagerCommunicationException
DefaultSource Information 0 Stack Trace:
DefaultSource Information 0 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.PrepareConnection(DbConnection owningObject, DbConnectionInternal obj, Transaction transaction)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()

All normal database connections work as long as they are not in a transaction. We have checked the firewall and it has not changed. Oddly enough, the Event Log on the server shows the transactions getting through and failing. The DTC is set to allow Network DTC Access on the server is enabled for inbound and outbound access. Mutual authentication is enabled.

Any suggestions on how to resolve or troubleshoot this? One thing for sure, we are going to turn off automatic updates for our clients as our support load goes up after a patch release that affects anything to do with the DTC.

I checked our patch history - On the evening of December 11th, 2019 the following 3 patches were installed:

KB4525236, KB4520724, KB908830

The server was also rebooted after these were installed with no affect.

Thanks




Neil M. Johnson

Continue reading...
 
Back
Top Bottom