Fehlermeldung beim Besuch einer Website, die unter IIS 7.0 oder höheren Versionen gehostet wird: HTTP-Fehler 404.17 – Nicht gefunden

Dieser Artikel hilft Ihnen beim Beheben des HTTP-Fehlers 404.17 – Nicht gefunden , wenn Sie eine Website besuchen, die auf Internetinformationsdienste (IIS) 7.0 oder höheren Versionen gehostet wird.

Ursprüngliche Produktversion: Internetinformationsdienste
Ursprüngliche KB-Nummer: 2019689

Symptome

Sie verfügen über eine Website, die in IIS 7.0 oder höheren Versionen gehostet wird. Wenn Sie mit einem Webbrowser zu dynamischen Inhalten auf der Website navigieren, erhalten Sie möglicherweise eine Fehlermeldung, die der folgenden ähnelt:

Fehlerzusammenfassung
HTTP-Fehler 404.17 – Nicht gefunden
Der angeforderte Inhalt scheint ein Skript zu sein und wird nicht vom statischen Dateihandler bereitgestellt.
Ausführliche Fehlerinformationen:

Modul StaticFileModule
Notification ExecuteRequestHandler
Handler StaticFile
Fehlercode 0x80070032

Angeforderte URL http://iisserver:80/page.aspx
Physischer Pfad C:\inetpub\wwwroot\page.aspx
Anmeldemethode Anonym
Benutzer anonym anmelden

Ursache

Dieser Fehler tritt auf, weil für den HTTP-Handler, der für die Verarbeitung der Anforderung konfiguriert ist, bestimmte Vorbedingungen festgelegt sind, sein Anwendungspool jedoch nicht einige oder alle dieser Voraussetzungen erfüllt. Dies bewirkt, dass stattdessen der statische Dateihandler verwendet wird, um die Anforderung zu verarbeiten. Die Verarbeitung der Anforderung schlägt dann fehl, und die 404.17 status 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 der Fehler 404.17 zurückgegeben, wenn die *.aspx Ressource, die vom Standort angefordert wird, in einem Anwendungspool behandelt wird, der nicht im Classic Modus ausgeführt 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 Voraussetzungen erfüllt sein. Insbesondere müsste der Anwendungspool, der diese Ressource hostet, für Classic Mode konfiguriert werden, er muss für die Verwendung der Version 2.0 des .NET Framework konfiguriert werden, und er muss für 32-Bit-Anwendungen festgelegt werden.

Lösung

Um dieses Problem zu beheben, konfigurieren Sie den Anwendungspool, der die Anwendung hostet, so dass er alle für den Handler festgelegten Vorbedingungen erfüllt.

  1. Öffnen des IIS-Managers

  2. Erweitern Sie den Computernamen, und klicken Sie im linken Bereich auf Anwendungspools .

  3. Markieren Sie im mittleren Bereich den Anwendungspool, der die Ressource hosten soll.

  4. Klicken Sie ganz rechts auf Erweiterte Einstellungen...

  5. Konfigurieren Sie im Dialogfeld Erweiterte Einstellungen unter der Kategorie (Allgemein) die folgenden Einstellungen so, dass sie den Anforderungen des Handlers entsprechen:

    • .NET Framework Version
    • Aktivieren von 32-Bit-Anwendungen
    • Verwalteter Pipelinemodus

Weitere Informationen

Die Informationen in diesem Abschnitt sollen dabei helfen, zu ermitteln, welche Handler für die website und die Anwendung konfiguriert sind, die im Fehler erwähnt werden, sowie die Voraussetzungen zu identifizieren, die für diesen Handler konfiguriert sind.

Appcmd.exe-Befehle

Die folgenden Befehle können verwendet werden, um die für die Website konfigurierten Handler zu identifizieren, die in der Ausgabe des Fehlers aufgeführt sind.

Auflisten des Anwendungspools

Die folgenden Befehle zeigen, wie Sie ermitteln, 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)

Auflisten von Handlern

Dieser Befehl gibt die Handler aus, die für die spezifische 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>

Im Fall von ASP.NET können viele Handler für eine *.aspx-Ressource konfiguriert sein. In einigen Fällen muss der Handler möglicherweise nur so geändert werden, dass er mit dem Anwendungspool übereinstimmt, in dem die Anwendung ausgeführt wird. Im Folgenden finden Sie eine Liste der verschiedenen ASP.NET 2.0-Handler mit ihren verschiedenen Vorbedingungseinstellungen.

  • ASP.NET 2.0 32/64-Bit-Handler im integrierten Modus

    <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" 
         type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
    
  • ASP.NET 32-Bit-Handler im klassischen 2.0-Modus

    <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 64-Bit-Handler im klassischen 2.0-Modus

    <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" />
    

Zu reproduzierende Schritte

  1. 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>
      
  2. Erstellen Sie eine Anwendung mit IIS 7.0 oder höheren Versionen, die mit diesen beiden Dateien auf das Verzeichnis verweist.

  3. Konfigurieren Sie die neue Anwendung so, dass sie in einem Anwendungspool ausgeführt wird, der für den integrierten Modus konfiguriert ist.

  4. Navigieren Sie zu test.aspx.