XACT_E_NOTIMEOUT (0x8004D017) – MSDTC timeout not supported fix
This error means MSDTC doesn't support timeouts on your system. The fix is adjusting DTC security or network config. I've seen it on Server 2012–2019 and Windows 10 Pro.
Quick answer: This error means the Microsoft Distributed Transaction Coordinator (MSDTC) received a time-out value but can't enforce it — the DTC security or network config is blocking time-out support. The fix is reconfiguring DTC security settings and restarting the service.
Why this happens
You'll see 0x8004D017 when an app — usually a SQL Server linked server query, a COM+ component, or a .NET TransactionScope — tries to set a transaction time-out and MSDTC says "nope." The culprit is almost always the DTC security configuration. Microsoft disabled time-out support by default in certain configurations, especially after Windows Server 2012. The error doesn't mean your transaction actually timed out — it means the time-out mechanism itself isn't wired up.
I've fixed this on Server 2012 R2, Server 2016, Server 2019, and Windows 10 Pro. The trigger is almost always a cross-machine transaction or a local transaction using remote DTC. Don't bother reinstalling MSDTC — it rarely helps. The real fix is in the registry and service config.
Step-by-step fix
- Open Component Services
Press Win + R, typedcomcnfg, hit Enter. Expand Component Services > Computers > My Computer > Distributed Transaction Coordinator. - Check DTC Security Configuration
Right-click Local DTC > Properties. Go to the Security tab. Here's what matters:- Check Network DTC Access
- Under that, check Allow Remote Clients and Allow Remote Administration
- Check Allow Inbound and Allow Outbound
Don't check No Authentication Required unless you're on a domain and know what you're doing — it opens a security hole.
- Enable time-out support via registry
This is the part most people miss. Time-out isn't honored unless the DTC instance has a specific registry key. Open Regedit and go to:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security
Look for a DWORD called TimeoutEnabled. If it doesn't exist, create it. Set its value to 1. If you're on a cluster, you might need to set this on each node. - Restart MSDTC service
In an admin PowerShell or CMD:
Or usenet stop msdtc && net start msdtcservices.msc— find Distributed Transaction Coordinator, right-click, restart. - Test the transaction
Try your original operation again. If you still get the error, proceed to the alternative fixes below.
Alternative fixes if the main one fails
Firewall ports
MSDTC uses a dynamic port range by default (TCP ports 1024–65535). That's ugly for firewalls. To lock it down:
netsh RPC add port internet 5000-5020
Then configure DTC to use that range: open Component Services, right-click My Computer > Properties > Default Protocols > Properties for DCOM Protocols — not necessary for most people, but if you're behind a strict firewall, do it.
Check for conflicting software
Antivirus or security suites that hook into RPC (like certain Symantec or McAfee versions) can block DTC time-out support. Temporarily disable the AV and test. If the error goes away, add an exception for msdtc.exe (usually in C:\Windows\System32).
Verify DTC isn't using a stale configuration
If you've changed DTC security recently, sometimes the service holds onto old settings. Reboot the machine — don't just restart the service. That clears the cached config.
Check the Windows Event Logs
Open Event Viewer, go to Applications and Services Logs > Microsoft > Windows > MSDTC > Operational. Look for event IDs 4099 (time-out configuration) or 4100 (security). Those will tell you exactly what's being rejected.
Prevention tip
Once you've got time-out support working, lock it down. Set a reasonable default time-out in your app (30 seconds is standard for SQL linked server queries). Don't rely on infinite time-outs — they'll hang your app if the remote server goes down. Also, document which machines need the TimeoutEnabled registry key. I've seen this error reappear after Windows updates reset DTC security. Check the key after every cumulative update.
Was this solution helpful?