The COM+ application 'eConnect' is unable to complete distributed transactions successfully against the SQL server. It fails with the error :

(0x8004E002): The root transaction wanted to commit, but transaction aborted.

 The eConnect COM+ application tries to send xml data to the SQL server on another server. Both the servers are Windows 2008. It runs for a while and then comes back with the error message :

System.Runtime.InteropServices.COMException (0x8004E002): The root transaction wanted to commit, but transaction aborted (Exception from HRESULT: 0x8004E002)
at System.EnterpriseServices.IRemoteDispatch.RemoteDispatchNotAutoDone(String s)
at System.EnterpriseServices.RemoteServicedComponentProxy.Invoke(IMessage reqMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at Microsoft.Dynamics.GP.eConnect.eConnectMethods.eConnect_EntryPoint(String ConnectionString, ConnectionStringType ConnectionType, String sXML,
SchemaValidationType ValidationType, String eConnectSchema)
at DirectDocSenderDotNet.FrmDocSender.btnSend_Click(Object sender, EventArgs e)
in C:\program files\Common Files\microsoft shared\eConnect 10\eConnect Samples\CSHARP DirectDocSender\frmDocSender.cs:line 379


Checked the DTC security settings under component services --> computers --> My computer --> local dtc --> security. Enabled Network DTC access and the other options :

Allow remote clients
Allow remote administrations
Allow inbound
Allow outbound
No authentication required

Enabled the same options on the SQL Server machine. Still the transaction would run for a while and then abort. The global transaction timeout of DTC was set to 360 seconds under component services --> computers --> My computer --> properties --> Options. Configured the same timeout on SQL server box. Still no luck.
We checked the C:\windows\system32\DTCTrace.log file and found that the transactions were being aborted by the SQL server box.

 

Resolution

We checked the transaction timeout on the COM+ components and they were set to 120 seconds. Changed them to 360 on all the transactional components. Ran the transaction and now it completed successfully.