Fehlermeldung beim Aufrufen einer Website, die in IIS 7.0 oder höher gehostet wird: HTTP-Fehler 404.17 – Nicht gefunden
Dieser Artikel hilft Ihnen, den HTTP-Fehler 404.17 – Problem "Nicht gefunden" zu beheben, wenn Sie eine Website besuchen, die auf Internetinformationsdienste (IIS) 7.0 oder höher gehostet wird.
Ursprüngliche Produktversion: Internetinformationsdienste
Ursprüngliche KB-Nummer: 2019689
Problembeschreibung
Sie verfügen über eine Website, die auf IIS 7.0 oder höher gehostet wird. Wenn Sie mithilfe eines Webbrowsers zu dynamischen Inhalten auf der Website navigieren, wird möglicherweise eine Fehlermeldung angezeigt, die folgendermaßen aussieht:
Fehlerzusammenfassung
HTTP-Fehler 404.17 – Nicht gefunden
Der angeforderte Inhalt scheint ein Skript zu sein und wird nicht vom statischen Dateihandler bereitgestellt.
Detaillierte Fehlerinformationen:Module StaticFileModule
ExecuteRequestHandler-Benachrichtigung
Handler StaticFile
Fehlercode 0x80070032Angeforderte URL http://iisserver:80/page.aspx
Physischer Pfad C:\inetpub\wwwroot\page.aspx
Anonyme Anmeldemethode
Anonymer Anmeldebenutzer
Ursache
Dieser Fehler tritt auf, weil für den für die Verarbeitung der Anforderung konfigurierten HTTP-Handler bestimmte Vorbedingungen festgelegt sind, der Anwendungspool jedoch einige oder alle dieser Voraussetzungen nicht erfüllt. Dadurch wird stattdessen der statische Dateihandler zum Verarbeiten der Anforderung verwendet. Die Verarbeitung der Anforderung schlägt dann fehl, und der Status 404.17 wird zurückgegeben, da die Anforderung für eine dynamische Ressource und nicht für eine statische Ressource gilt.
Betrachten Sie beispielsweise die folgende Handlerzuordnung:
<add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
In diesem Fall wird ein 404.17-Fehler zurückgegeben, wenn die von der Website angeforderte *.aspx-Ressource in einem Anwendungspool verarbeitet wird, der nicht im Modus ausgeführt Classic wird, nicht 32 Bit ist oder nicht die Version 2.0 des .NET Framework ausführt. Damit die Ressource in diesem Beispiel ordnungsgemäß bereitgestellt wird, müssen alle drei Vorbedingungen erfüllt sein. Insbesondere müsste der Anwendungspool, der diese Ressource hostet, für den Modus konfiguriert werden, er Classic müsste für die Verwendung der 2.0-Version des .NET Framework und für 32-Bit-Anwendungen festgelegt werden.
Lösung
Um dieses Problem zu beheben, konfigurieren Sie den Anwendungspool, in dem die Anwendung gehostet wird, so, dass alle für den Handler festgelegten Vorbedingungen erfüllt werden.
Öffnen des IIS-Managers
Erweitern Sie den Computernamen, und klicken Sie im linken Bereich auf "Anwendungspools".
Markieren Sie den Anwendungspool, der die Ressource im mittleren Bereich hostet.
Klicken Sie im rechten Bereich auf Erweitert Einstellungen...
Konfigurieren Sie im Dialogfeld "Erweiterte Einstellungen" unter der Kategorie (Allgemein) die folgenden Einstellungen so, dass sie den Handleranforderungen entsprechen:
- .NET Framework Version
- Aktivieren von 32-Bit-Anwendungen
- Verwalteter Pipelinemodus
Weitere Informationen
Die Informationen in diesem Abschnitt sollen dabei helfen, zu identifizieren, welche Handler für die website und die Anwendung konfiguriert sind, die im Fehler erwähnt wird, sowie die Vorbedingungen zu identifizieren, die für diesen Handler konfiguriert sind.
Appcmd.exe-Befehle
Die folgenden Befehle können verwendet werden, um die Handler zu identifizieren, die für die Website konfiguriert sind, die in der Ausgabe des Fehlers aufgeführt ist.
Anwendungspool auflisten
Die folgenden Befehle zeigen, wie Sie bestimmen, in welchem Anwendungspool die Anwendung ausgeführt wird, und dann die für diesen Anwendungspool konfigurierten Vorbedingungen auflisten.
C:\Windows\System32\inetsrv>appcmd.exe list apps /site.name:"Default Web Site"
APP "Default Web Site/" (applicationPool:DefaultAppPool)
C:\Windows\System32\inetsrv>appcmd.exe list apppools
APPPOOL "DefaultAppPool" (MgdVersion:v2.0,MgdMode:Integrated,state:Started)
Handler auflisten
Dieser Befehl gibt die Handler aus, die für die jeweilige Anwendung auf der Standardwebsite konfiguriert sind.
C:\Windows\System32\inetsrv>appcmd.exe list config "Default Web Site/application" -section:handlers
<system.webServer>
<handlers accessPolicy="Read, Script">
<add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
</handlers>
</system.webServer>
Bei ASP.NET sind möglicherweise viele Handler für eine *.aspx-Ressource konfiguriert. In einigen Fällen muss der Handler möglicherweise nur so geändert werden, dass er dem Anwendungspool entspricht, in dem die Anwendung ausgeführt wird. Nachfolgend finden Sie eine Liste der verschiedenen ASP.NET 2.0-Handler mit ihren verschiedenen Vorbedingungseinstellungen.
ASP.NET 2.0 Integrated Mode 32/64-Bit-Handler
<add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />ASP.NET 2.0 Classic Mode 32-Bit-Handler
<add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />ASP.NET 2.0 Classic Mode 64-Bit-Handler
<add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
Schritte zum Reproduzieren
Erstellen Sie ein Verzeichnis, das zwei Dateien enthält.
Test.aspx mit dem Inhalt
<%Response.Write("Hello World")%>Web.config mit dem Inhalt:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <httpRedirect enabled="false" destination="http://TestSite" exactDestination="false" childOnly="false" httpResponseStatus="Permanent" /> <security> </security> <handlers> <clear/> <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" /> <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" /> </handlers> </system.webServer> <system.web> <authentication mode="Windows"> <forms cookieless="UseCookies" /> </authentication> </system.web> </configuration>
Erstellen Sie eine IIS 7.0- oder höher-Versionsanwendung, die mit diesen beiden Dateien auf das Verzeichnis verweist.
Konfigurieren Sie die neue Anwendung so, dass sie in einem Anwendungspool ausgeführt wird, der für den integrierten Modus konfiguriert ist.
Navigieren Sie zu test.aspx.