"8004E00F - COM+ was unable to talk to Microsoft Distributed Transaction Coordinator" - MSDTC on a CCR cluster (Cluster Continuous Replication)

I ran into rather interesting issue yesterday while trying to configure MSDTC on a CCR cluster and thought it would be useful to share this info out.

Problem Description

My customer was unable to install a third application and getting few errors while trying to interact with COM+/MSDTC. Under Component Services, red mark appeared against My Computer, Also when “COM+ application” node is selected, we encounter the following error.

An unexpected error occurred while processing the last operation

Error code - 8004E00F - COM+ was unable to talk to Microsoft Distributed Transaction Coordinator

Cause

Prior to Windows server 2008, in a cluster environment, MSDTC is only supported as cluster resource. Local DTC on a cluster environment is not supported. Starting from Windows Server 2008, MSDTC can be configured to run locally or as a cluster resource.

 

In a cluster environment, if the applications communicating with MSDTC are not using the latest parameters available in DtcGetTransactionManagerEx to specify the DTC instance,

  • The application will pick the Cluster default if present.
  • If cluster default is not present it will use the local DTC.

The following article discusses cluster fallback logic and TM Mappings in detail. Any resource which uses the latest DTC APIs and specifies a DTC instance will automatically pick that DTC instance. For legacy apps, it will pick DTC instances as specified in

https://blogs.technet.com/askcore/archive/2009/02/18/how-to-configure-multiple-instances-of-distributed-transaction-coordinator-dtc-on-a-windows-server-failover-cluster-2008.aspx

In our specific case we were troubleshooting, COM+ is trying to communicate with the clustered MSDTC resource which doesn’t exist anymore. This could have been possibly caused if MSDTC cluster resource is configured previously and deleted at later stage, but still has references from registry, etc.

We’ve concluded this because we are able to see the cluster resource in the COM+ and we found evidence in the registry indicating there was one clustered MSDTC resource which was not deleted properly.

Solution

There are 2 solutions for this

 

1) Configure cluster MSDTC resource – I was unable to get this to working in my customer’s scenario, because we were unable to create required dependencies for DTC

 

An MS DTC resource has two resource dependencies: a physical disk and a network name. You must ensure that these MS DTC dependencies reside in the same group as the MS DTC resource.

https://technet.microsoft.com/en-us/library/cc770748(WS.10).aspx

 

We were unable to create disk resource in the CCR cluster. 

 

2) Use the local DTC by configuring TMMappings for COM+ system application ( or for any other application you are using). We ran the following command to configure local DTC for dllhost.exe(COM+ applications)

msdtc -tmMappingSet -name DLLHOSTMapping -exe c:\Windows\System32\dllhost.exe -local

You can also configure your applications to use the specific DTC instance by using the above command. For example, if you would like to configure BizTalk to use specific DTC instance, you can achieve by using the following commands

 msdtc -tmMappingSet -name BizTalkMapping -exe c:\Program files\Microsoft BizTalk Server2006\btsntsvc.exe –local (this will use local DTC for BizTalk)

msdtc -tmMappingSet -name BizTalkMapping -exe c:\Program files\Microsoft BizTalk Server2006\btsntsvc.exe - ClusterResourceName DTCForBizTalk(Here, I’m assuming that you have created a MSDTC resource on a cluster with the name “DTCForBizTalk”, you can use any name you want. This command will make sure BizTalk uses a specific clustered DTC instance)

If you want to be able to specify different DTC instances for different COM+ applications, you need to configure mappings based on service/complusappId.

References

I would highly recommend going through this article to understand how to configure multiple instances of DTC on a failover cluster. This article also covers

https://blogs.technet.com/askcore/archive/2009/02/18/how-to-configure-multiple-instances-of-distributed-transaction-coordinator-dtc-on-a-windows-server-failover-cluster-2008.aspx

In Windows Vista, DTC introduced new tracing features which will come in handy while troubleshooting the issue. Following article explains regarding the new tracing features and how to configure the same.

How to enable diagnostic tracing for MS DTC on a Windows Vista-based computer

https://support.microsoft.com/kb/926099

Other useful articles

Understanding MS DTC Resources in Failover Clusters

https://technet.microsoft.com/en-us/library/cc755269(WS.10).aspx

Requirements for Creating an MS DTC Resource in a Failover Cluster

https://technet.microsoft.com/en-us/library/cc770748(WS.10).aspx

 

Map Clustered MS DTC Resources

https://technet.microsoft.com/en-us/library/cc742483(WS.10).aspx

 

MSDTC changes in WS2008 (There are four parts, please go through all)

https://www.pluralsight.com/community/blogs/jimjohn/archive/2008/03/15/50484.aspx

Comments

  • Anonymous
    January 07, 2010
    Thanks much - it worked for me on a Windows 2008 Cluster with SQL 2008.

  • Anonymous
    February 16, 2015
    Thanks so much. I'm not sure why it took me so long to find a solution, but running this command you listed brought MSDTC back online for a clustered node: msdtc -tmMappingSet -name DLLHOSTMapping -exe c:WindowsSystem32dllhost.exe -local