By David, , updated
Azure Virtual Desktop (AVD) connection errors come from one of three places: the user's client, the AVD service's own diagnostics (the WVDErrors table in Log Analytics), or the AVD agent on the session host, which logs event IDs such as 3277, 3703 and 3019. Find which layer produced the code and you've found the fix: client codes point at the user's device or sign-in, WVDErrors codes point at assignment or host availability, and agent events point at registration or blocked network endpoints.
The short version: start with the user's error code and the time, then look up the same connection in
WVDErrorsby user and time. If the host is the problem, read the session host's Application event log forWVD-Agentevents. Most "can't connect" tickets come down to a missing assignment, no available host, an expired registration key or a blocked required URL.
Where AVD error codes come from
| Layer | Where you see it | What it usually means |
|---|---|---|
| Client | The error dialog in Windows App or the Remote Desktop client, with a hex code | Sign-in, network or a problem the service reported back to the client |
| AVD service | WVDErrors and WVDConnections in Log Analytics, once you've turned on host pool diagnostics | Feed, assignment, brokering and host availability |
| Session host agent | Event Viewer → Windows Logs → Application, sources WVD-Agent, WVD-Agent-Updater, RDAgentBootLoader and MsiInstaller | Agent registration, broker reachability, stack listener |
Connections that never reach the AVD service, because the user's network blocked them, don't appear in the service diagnostics at all (Microsoft Learn). If a user reports an error and WVDConnections has no record of the attempt, look at the user's network first.
Session host agent errors (Event Viewer, Application log)
These come straight from Microsoft's agent troubleshooting guide (Troubleshoot Azure Virtual Desktop Agent issues). Each one makes the host unavailable or unhealthy, so users either can't land on it or can't connect at all.
| Event and code | Meaning | Fix |
|---|---|---|
3277 INVALID_REGISTRATION_TOKEN or EXPIRED_MACHINE_TOKEN | The registration key isn't valid | Generate a new registration key, set it under HKLM\SOFTWARE\Microsoft\RDInfraAgent, set IsRegistered to 0, restart RDAgentBootLoader |
3277 INVALID_FORM | The agent can't reach the broker | Check firewall and DNS: browse to the BrokerResourceIdURI value plus /api/health and expect RD Broker is Healthy |
3277 ENDPOINT_NOT_FOUND | The broker found no host to send the user to | Make sure hosts are on, registered, under their session limit and running the agent |
3277 InstallationHealthCheckFailedException | The stack listener isn't working | Check the listener, reinstall the side-by-side stack |
3277 InstallMsiException | Another installer is running, or policy blocks msiexec.exe | Check Turn off Windows Installer in Resultant Set of Policy |
3277 DownloadMsiException | Not enough disk space for the agent | Free space or enlarge the disk |
3703 RD Gateway Url: is not accessible | The agent can't reach the gateway URLs | Allow the required URLs through your firewall or proxy |
| 3019 | The agent can't reach the web socket transport URLs | Unblock the required URLs, check proxy and DNS |
3389 MissingMethodException | Agent update failed and rolled back, .NET older than 4.7.2 | Update .NET Framework to 4.7.2 or later |
NAME_ALREADY_REGISTERED | A host with the same name is already registered | Remove the stale session host, redeploy with a unique name |
Two agent conditions don't come with an event code but are just as common:
- Remote Desktop Agent Loader stopped. If
RDAgentBootLoaderwon't stay running after you start it, it's usually a registration failure: see the 3277 token errors above. If it times out at boot, Microsoft suggests setting it to Automatic (Delayed Start) and raisingServicesPipeTimeout. - Stack listener not listening. Run
qwinsta.exe. Therdp-tcpandrdp-sxsentries should both showListen. If not, reinstall the side-by-side stack from theSxSStack*.msiunderC:\Program Files\Microsoft RDInfra.
AVD service errors (WVDErrors)
With diagnostics turned on for your host pools, workspaces and application groups, every failed attempt lands in WVDErrors. To find a user's errors:
WVDErrors
| where UserName == "user@contoso.com"
| take 100
The CodeSymbolic column names the error, and the ServiceError column tells you whose problem it is: false means something an admin can fix, true means escalate to Microsoft with the CorrelationId. The codes you'll see most:
CodeSymbolic | Meaning | Where to look |
|---|---|---|
ConnectionFailedNoHealthyRdshAvailable | No session host could take the connection: none healthy, all in drain mode, all at their session limit, or none running | Session host status and capacity; Start VM on Connect if hosts are deallocated |
ConnectionFailedUserNotAuthorized | The user isn't assigned to the app group, or the resource was unpublished | Application group assignments |
ConnectionFailedAdTrustedRelationshipFailure | The host can't authenticate to the domain | Domain controller reachability, the computer object's trust |
ConnectionFailedClientDisconnect | The client went away during the connection | The user's network, and whether the session was on UDP or TCP |
Use the same query with | summarize count(UserName) by CodeSymbolic to see whether one user or a whole pool is affected.
Client-side codes and messages
The client shows a short message and a hex code. Microsoft doesn't publish one reference table for these, so read them together with the service and agent logs above. The common ones:
| What the user sees | Usually means | First check |
|---|---|---|
| It appears that your system administrator has not yet configured any resources | The user has no AVD resources assigned | Application group assignment, and that the group is a security group, not a distribution group |
| No desktops after sign-in, after a tenant or subscription move | Assignments tied to the old Microsoft Entra tenant | Reassign users; re-register the Microsoft.DesktopVirtualization resource provider |
| Sign-in blocked by Conditional Access | The user can't reach the Azure Virtual Desktop, Windows 365 or Windows Cloud Login apps | Sign-in logs, Conditional Access policy scope |
| A code such as 0x3000047 when connecting | The service couldn't hand the user to a host | WVDErrors for the same user and time, then host health |
| Repeated disconnects | Network drops between client and host | ConnectionFailedClientDisconnect in WVDErrors, and the transport the session used |
Before anything else, rule out the client: update Windows App, try the user from Windows App in a web browser, and check their round-trip time with the Azure Virtual Desktop Experience Estimator (Basic troubleshooting for Windows App).
Every AVD connection error belongs to one layer: the client, the AVD service or the session host's agent. Find the layer first and the fix is usually one setting.
Where Atlas AVD helps
- Hosts that never registered don't hide. When Add VMs builds a host, Atlas fetches the registration token and installs the AVD agent, and a host that doesn't register in time fails its deployment job instead of sitting in the pool unnoticed.
- Unhealthy hosts in one filter. The Session Hosts list filters to Needs Assistance, and an agent health view shows every host's AVD agent version and health. Session host needs assistance explains each health check.
- Diagnostics on by default. For the pools it deploys, Atlas turns on AVD Insights diagnostics into your own Log Analytics workspace, so
WVDErrorshas data when you need it. - Start from the user. The Users page shows each user's session host, state and last latency, and opening a user shows connection history and a latency graph.
- Alerts before tickets. Alert rules cover unavailable VMs, latency and pools at capacity, delivered to Teams, Slack or a signed webhook.
That's the real Atlas AVD console in our demo environment; the users and sessions are sample data. For running AVD at scale, see AVD fleet management.
FAQ
How do I find the cause of an AVD connection error?
Note the error code and time, then query WVDErrors in Log Analytics for that user. If the service points at the host, check the session host's Application event log for WVD-Agent events.
What does INVALID_REGISTRATION_TOKEN mean?
The session host's registration key isn't valid or has expired. Generate a new key for the host pool, write it to the agent's registry key, set IsRegistered to 0 and restart the RDAgentBootLoader service.
What does ConnectionFailedNoHealthyRdshAvailable mean?
No session host in the pool could accept the connection: the hosts are unhealthy, in drain mode, at their session limit or turned off.
Why can a user sign in but see no desktops?
They usually aren't assigned to an application group, or they're in a distribution group rather than a security group. After a tenant move, assignments need to be redone.
Why are connection attempts missing from my AVD logs?
Connections that never reach the AVD service, because of the user's network, aren't recorded in AVD diagnostics. Check the user's network and firewall.
What if the user connects but sees a black screen?
That's a sign-in problem on the host, not a connection error. See AVD black screen.
Last updated 9 November 2026. Microsoft details are drawn from Microsoft Learn as of November 2026: Troubleshoot Azure Virtual Desktop Agent issues, Azure Virtual Desktop service connections, Azure Virtual Desktop diagnostics log analytics and Basic troubleshooting for Windows App. WVDErrors code descriptions summarize Microsoft's diagnostics documentation; confirm against the codes in your own workspace.