Freigeben über


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

Dieser Artikel hilft Ihnen beim Beheben des HTTP-Fehlers 404.17 – Problem nicht gefunden, 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 haben eine Website, die in IIS 7.0 oder höheren Versionen gehostet wird. Wenn Sie mithilfe eines Webbrowsers zu dynamischen Inhalten auf der Website navigieren, wird möglicherweise eine Fehlermeldung angezeigt, die wie folgt 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
Notification ExecuteRequestHandler
Handler StaticFile
Fehlercode-0x80070032

Angeforderte URL http://iisserver:80/page.aspx
Physischer Pfad C:\inetpub\wwwroot\page.aspx
Logon-Methode Anonym
Anonymer Anmeldebenutzer

Ursache

Dieser Fehler tritt auf, da der für die Verarbeitung der Anforderung konfigurierte HTTP-Handler bestimmte Voraussetzungen festgelegt hat, der Anwendungspool jedoch nicht einige oder alle diese Voraussetzungen erfüllt. Dies bewirkt, dass der statische Dateihandler stattdessen zum Verarbeiten der Anforderung verwendet wird. Die Verarbeitung der Anforderung schlägt dann fehl, und der 404.17-Status 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 *.aspx Ressource, die von der Website angefordert wird, in einem Anwendungspool behandelt wird, der nicht im Classic Modus ausgeführt wird, nicht 32 Bit ist oder die 2.0-Version von .NET Framework nicht ausgeführt wird. 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 Classic den Modus konfiguriert werden, muss für die Verwendung der 2.0-Version von .NET Framework konfiguriert werden und für 32-Bit-Anwendungen festgelegt werden.

Lösung

Um dieses Problem zu beheben, konfigurieren Sie den Anwendungspool, der die Anwendung hostet, um alle für den Handler festgelegten Vorbedingungen zu erfüllen.

  1. Öffnen des IIS-Managers

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

  3. Markieren Sie den Anwendungspool, in dem die Ressource im mittleren Bereich gehostet wird.

  4. Klicken Sie im bereich 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 im Fehler erwähnte Website und Anwendung konfiguriert sind, sowie die Voraussetzungen zu identifizieren, die für diesen Handler konfiguriert sind.

befehle Appcmd.exe

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 Voraussetzungen 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)

Listenhandler

Mit diesem Befehl werden die Handler ausgegeben, 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>

Bei ASP.NET können viele Handler für eine *.aspx-Ressource konfiguriert werden. In einigen Fällen muss der Handler möglicherweise nur geändert werden, um dem Anwendungspool zu entsprechen, 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

  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 IIS 7.0- oder höher-Versionsanwendung, 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.