"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
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
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