Skip to content

Est. 2011ยทMicrosoft Partner 7033487ยทDelivery under 3 minยทSupport 7 days a week

Your vault is empty.

Free Fix HTTP 500.100

RD Web Access broken: HTTP 500.100, HTTP 404.17 and Event ID 1309 explained

11 min read Updated October 5, 2026 Windows Server: RDS, Hyper-V & Clustering

Fix it now

The request reached IIS and the managed pipeline that renders RD Web Access never ran, or ran and threw. The published cause of a 404.17 is an application pool that does not meet the handler’s preconditions, so start with the pool settings rather than with the files on disk.

Elevated PowerShell on the RD Web Access server

Get-WindowsFeature Web-Asp-Net45, Web-Net-Ext45
Get-Website
Get-WebAppPoolState
  1. In IIS Manager, select the RDWeb application and open Basic Settings to see which pool it uses. Then open Application Pools, select that pool, and check Advanced Settings: .NET Framework Version, Managed Pipeline Mode and Enable 32-Bit Applications are the three preconditions a handler can fail.
  2. Turn on detailed errors for local requests in Error Pages, Edit Feature Settings, then browse to https://localhost/RDWeb/Pages from the server console and read the full substatus rather than the generic page.
  3. At server level in IIS Manager, open ISAPI and CGI Restrictions and confirm the ASP.NET entries are Allowed. A 404.2 is that list refusing the handler outright.
  4. Recycle the application pool, then retest both the page and the feed URL.

404 substatuses here are not missing files. Hunting for the page on disk is the single most common way to waste an hour on this.

If the logon page renders and the feed returns resources, stop here. If you are getting a 500 rather than a 404, the next section explains which 500 you have and which are not about RD Web Access at all.

Why it happens

RD Web Access is an ASP.NET application published under the RDWeb path of a site in IIS. It does two jobs: it draws the logon and application pages users see, and it serves the feed that RemoteApp and Desktop Connections subscribes to. Both are managed code, so both depend on ASP.NET being installed, permitted to run, and reachable through a handler whose preconditions the application pool satisfies.

The 404 substatuses describe a broken pipeline rather than a missing file. Microsoft publishes 404.17 as dynamic content mapped to the static file handler, and the documented cause is specific: the handler that should take the request has preconditions, the application pool does not meet some or all of them, so the static file handler takes it instead and refuses because the request is for a dynamic resource. The preconditions are pipeline mode, bitness and .NET Framework version. Missing ASP.NET is one way to land there; it is not the definition. 404.2 is different again and simpler, and Microsoft publishes it as an ISAPI or CGI restriction: the list at server level refuses the handler.

The 500 substatuses split into two groups. 500.22 and 500.23 are published as an ASP.NET configuration that does not apply in Managed Pipeline mode, one for modules and one for handlers. Those are real and they point straight at a pool running Integrated mode against configuration written for Classic. 500.100 is a different animal entirely: Microsoft publishes it as an internal ASP error, meaning an error while processing a classic Active Server Pages page. RD Web Access is not classic ASP, so a 500.100 there is not the RDWeb application failing. If a managed page throws, you get a plain 500 and the detail lands in an ASP.NET entry in the Application log.

The application pool does not meet the handler’s preconditions

You have this one if 404.17 on every managed page, and the pool’s runtime version, pipeline mode or bitness does not match what the handler expects.

  1. In IIS Manager open Application Pools, select the pool the RDWeb application uses, and open Advanced Settings.
  2. Set .NET Framework Version, Managed Pipeline Mode and Enable 32-Bit Applications to match the handler’s requirements.
  3. Recycle the pool and retest before changing anything else.

This is Microsoft’s own documented resolution for 404.17, and it is the first thing to try even when you suspect ASP.NET is missing.

ASP.NET is not installed or was removed

You have this one if 404.17 persists after the pool is correct, and the ASP.NET role services report as not installed.

  1. Check with Get-WindowsFeature Web-Asp-Net45, Web-Net-Ext45.
  2. Install the missing role services with Install-WindowsFeature Web-Asp-Net45, Web-Net-Ext45.
  3. Restart IIS so the new handler mappings are picked up, then retest.

A cumulative update that fails part-way, or a hardening script that strips role services, is the usual reason a working server loses this.

The handler is blocked at server level

You have this one if 404.2 rather than 404.17, and the ASP.NET entries in ISAPI and CGI Restrictions are set to Not Allowed.

  1. Open ISAPI and CGI Restrictions at server level and set the ASP.NET entries to Allowed.
  2. Select the RDWeb application, open Handler Mappings, and use Revert To Inherited so the application stops overriding the server defaults.
  3. Recycle the pool and retest.

Classic-pipeline configuration in an Integrated-mode pool

You have this one if 500.22 or 500.23, usually after another application’s installer reconfigured the pool or wrote to web.config.

  1. Set the pool to Integrated pipeline mode and the runtime version the application expects, and confirm the pool is started.
  2. Confirm the pool identity still has rights to the RD Web content, which installers also change.
  3. If configuration genuinely was written for the Classic pipeline, migrate it with the appcmd migrate config command rather than editing the file by hand.
  4. Recycle the pool and retest.

The application starts and throws at runtime

You have this one if A plain 500 in the browser with an ASP.NET entry in the Application log at the same moment.

  1. Read the ASP.NET entry. It names the exception type and the request that produced it, which is the shortest route to the answer.
  2. Check permissions on the RD Web content folder for the pool identity, particularly after a file restore.
  3. Check what sits behind the feed: if the Connection Broker is unreachable, the feed page throws rather than returning an empty list.
  4. Compare web.config with a known-good server of the same build if the file has been edited.

Full reference

What each substatus is published as

Code Published meaning Where to look first
404.2 ISAPI or CGI restriction: the requested resource is restricted on the computer ISAPI and CGI Restrictions at server level
404.17 Dynamic content mapped to the static file handler Application pool: pipeline mode, bitness, .NET Framework version
500.22 An ASP.NET httpModules configuration does not apply in Managed Pipeline mode Pool pipeline mode against the module configuration
500.23 An ASP.NET httpHandlers configuration does not apply in Managed Pipeline mode Pool pipeline mode against the handler configuration
500.100 Internal ASP error, raised while processing a classic Active Server Pages page Not RD Web Access, which is ASP.NET. Find out which application produced it

That last row is worth reading twice, because it is a common misdirection. 500.100 is the classic ASP substatus. RD Web Access is a managed application, so when its code throws you get a plain 500 and the useful detail is in the ASP.NET entry in the Application log, not in a substatus. A genuine 500.100 on that server points at a different application, or at something in front of IIS relabelling the response.

Seeing the substatus at all

  1. In IIS Manager, select the site or the RDWeb application, open Error Pages, then Edit Feature Settings.
  2. Set detailed errors for local requests and detailed errors, so the console shows the substatus and remote browsers keep the generic page.
  3. Browse from the server console rather than from your desk, or you will get the generic page and learn nothing.
  4. Read the IIS log for the site as well. Status and substatus are separate fields there, so a 404.17 is visible as 404 and 17 without turning detailed errors on at all.

The 404.17 detail page, and what to take from it

When detailed errors are on, the 404.17 page names the module as StaticFileModule and the handler as StaticFile. That is the diagnosis in two lines: the request that should have gone to a managed handler was taken by the static file handler instead. The handler it should have reached has preconditions, and the pool failed at least one of them. A handler with preconditions such as classic mode, a particular runtime version or 32-bit will return 404.17 whenever the pool is not in classic mode, is not 32-bit, or is not on that runtime version, so all three are worth checking rather than only the one you suspect.

When the page loads and the feed does not

  • An empty feed on a working page is not an IIS problem. Look at the collection, the published RemoteApp programmes, and the user’s group membership.
  • A feed that throws rather than returning an empty list usually means the Connection Broker behind it is unreachable. Check the broker before the web server.
  • Subscribe a test machine to the feed URL rather than trusting the page, because the two paths do not fail identically.
  • Check the IIS log for the subscription request specifically. A feed request that never reaches the server is a name or certificate problem, not a pipeline one.

What not to do

Do not remove and re-add the RD Web Access role service to clear this. That resets the site configuration, the published feed settings and any customisation of the logon pages, and it fixes a pool setting by demolition. Do not reinstall IIS either: it takes the whole deployment offline and almost never fixes anything that correcting the pool, allowing the handler and reverting the handler mappings would not. Take a copy of the RD Web folder and export the site configuration before you consider either.

None of this is a licensing problem and none of it costs anything. RD Web Access is a role service of Windows Server you have already licensed. Licence faults in Remote Desktop Services surface as licensing events on the session hosts, naming licensing explicitly, not as IIS substatus codes.

Every code this article covers

Code What it points at Source
HTTP 500.100 Internal ASP error: an error occurred while processing a classic Active Server Pages page. RD Web Access is ASP.NET, so this is not the RDWeb application throwing Microsoft Learn
HTTP 404.17 Dynamic content mapped to the static file handler, because the application pool does not meet the handler’s preconditions of pipeline mode, bitness or .NET Framework version Microsoft Learn
Event ID 1309 Not published by Microsoft. Written by the ASP.NET source in the Application log; the exception type and failing request are in the entry body not published by the vendor
HTTP 404.2 ISAPI or CGI restriction: the requested ISAPI or CGI resource is restricted on the computer Microsoft Learn
HTTP 500.22 An ASP.NET httpModules configuration does not apply in Managed Pipeline mode Microsoft Learn
HTTP 500.23 An ASP.NET httpHandlers configuration does not apply in Managed Pipeline mode Microsoft Learn

Confirm the fix worked

  1. The RDWeb logon page renders completely from a client, images included.
  2. Signing in lists the published desktops or applications.
  3. A test machine subscribed to the feed URL retrieves the resources.
  4. The IIS log records those requests with status 200 and no substatus.
  5. The application pool’s runtime version, pipeline mode and bitness match what the handler requires, and the pool is started.

Questions people ask about this

Is any of this a licensing problem?

No, and it costs nothing to fix. RD Web Access is a role service of Windows Server you have already licensed. Licence problems in Remote Desktop Services surface as licensing events on the session hosts, not as IIS substatus codes.

I have a 500.100. Is that RD Web Access failing?

Almost certainly not. Microsoft publishes 500.100 as an internal ASP error, meaning classic Active Server Pages. RD Web Access is ASP.NET; when its code throws you get a plain 500 and the detail lands in an ASP.NET entry in the Application log.

Where do I see the substatus rather than a generic 500?

In the IIS log for the site, where status and substatus are separate fields, and on the server console once detailed errors for local requests are enabled. Remote browsers deliberately get the generic page.

Users say the page loads but no applications appear. Same problem?

No. An empty feed on a working page points at the collection, the published RemoteApp programmes or the user’s group membership, not at the pipeline.

Should I reinstall IIS?

Almost never. It takes the deployment offline and rarely fixes anything that correcting the application pool, allowing the handler and reverting the handler mappings would not.

Related error codes

Was this article helpful?

Your feedback helps us improve our documentation.

Related articles

License Error Event ID 129 and 153: iSCSI and SAN timeouts retry until the volume drops License Error Event ID 1306 and 1296: Connection Broker cannot redirect users to a host Free Fix Event ID 4625 with 0xC000015B: users lack the right to log on through RDS Free Fix Event ID 1069 and 1205: a clustered role keeps failing and will not stay online
โ† Back to Knowledge Base