"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


http://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.


http://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


 


http://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

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


 


 


Other useful articles


 


Understanding MS DTC Resources in Failover Clusters


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


 


Requirements for Creating an MS DTC Resource in a Failover Cluster


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


 


Map Clustered MS DTC Resources


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


 


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


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


 


Comments (2)

  1. kaziislam says:

    Thanks much – it worked for me on a Windows 2008 Cluster with SQL 2008.

  2. BRusso says:

    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