Felmeddelande när du besöker en webbplats som finns på IIS 7.0 eller senare versioner: HTTP-fel 404.17 – Hittades inte

Den här artikeln hjälper dig att lösa http-fel 404.17 – Hittades inte när du besöker en webbplats som finns på Internet Information Services (IIS) 7.0 eller senare versioner.

Ursprunglig produktversion: Internet Information Services
Ursprungligt KB-nummer: 2019689

Symptom

Du har en webbplats som finns i IIS 7.0 eller senare versioner. När du bläddrar till dynamiskt innehåll på webbplatsen med hjälp av en webbläsare kan du få ett felmeddelande som liknar följande:

Felsammanfattning
HTTP-fel 404.17 – Hittades inte
Det begärda innehållet verkar vara ett skript och hanteras inte av den statiska filhanteraren.
Detaljerad felinformation:

Modulen StaticFileModule
Notification ExecuteRequestHandler
Hantera StaticFile
Felkod 0x80070032

Begärd URL http://iisserver:80/page.aspx
Fysisk sökväg C:\inetpub\wwwroot\page.aspx
Anonym inloggningsmetod
Anonym inloggningsanvändare

Orsak

Det här felet beror på att HTTP-hanteraren som konfigurerats för att hantera begäran har vissa förhandsvillkor angivna, men dess programpool uppfyller inte vissa eller alla av dessa förutsättningar. Detta gör att den statiska filhanteraren används för att bearbeta begäran i stället. Bearbetningen av begäran misslyckas sedan och statusen 404.17 returneras eftersom begäran är för en dynamisk resurs och inte en statisk.

Tänk dig till exempel följande hanterarmappning:

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

I det här fallet returneras ett 404.17-fel om den *.aspx resurs som begärs från webbplatsen hanteras i en programpool som inte körs i Classic läge, inte är 32-bitars eller inte kör 2.0-versionen av .NET Framework. För att resursen ska kunna hanteras korrekt i det här exemplet måste alla tre förhandsvillkoren vara uppfyllda. Mer specifikt måste programpoolen som är värd för den här resursen konfigureras för Classic Läge, den måste konfigureras för att använda 2.0-versionen av .NET Framework och den måste anges för 32-bitarsprogram.

Åtgärd

Lös problemet genom att konfigurera programpoolen som är värd för programmet så att den uppfyller alla förvillkor som angetts för hanteraren.

  1. Öppna IIS-hanteraren

  2. Expandera datornamnet och klicka på Programpooler i det vänstra fönstret.

  3. Markera programpoolen som är värd för resursen i det mellersta fönstret.

  4. Klicka på Avancerade inställningar längst till höger...

  5. I dialogrutan Avancerade inställningar under kategorin (Allmänt) konfigurerar du följande inställningar för att matcha hanteringskraven:

    • .NET Framework version
    • Aktivera 32-bitarsprogram
    • Hanterat pipelineläge

Mer information

Informationen i det här avsnittet är avsedd att hjälpa till att identifiera vilka hanterare som har konfigurerats för webbplatsen och programmet som nämns i felet, samt hjälpa till att identifiera de förvillkor som har konfigurerats för den hanteraren.

Appcmd.exe kommandon

Följande kommandon kan användas för att identifiera de hanterare som konfigurerats för webbplatsen som anges i utdata från felet.

Lista programpool

Följande kommandon visar hur du fastställer vilken programpool programmet körs i och visar sedan de förhandsvillkor som konfigurerats för programpoolen.

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)

Listhanterare

Det här kommandot matar ut de hanterare som konfigurerats för det specifika programmet på standardwebbplatsen.

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>

När det gäller ASP.NET kan det finnas många hanterare konfigurerade för en *.aspx resurs. I vissa fall kan hanteraren bara behöva ändras för att matcha programpoolen som programmet körs i. Nedan visas en lista över olika ASP.NET 2.0-hanterare med deras olika förvillkorsinställningar.

  • ASP.NET 2.0 Integrerat läge 32/64-bitarshanterare

    <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" 
         type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
    
  • ASP.NET 32-bitarshanterare för klassiskt läge i 2.0

    <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-bitarshanterare för klassiskt läge i 2.0-läge

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

Steg för att återskapa

  1. Skapa en katalog som innehåller två filer.

    • Test.aspx med innehållet <%Response.Write("Hello World")%>

    • Web.config med innehållet:

      <?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. Skapa ett IIS 7.0- eller senare versionsprogram som pekar på katalogen med dessa två filer.

  3. Konfigurera det nya programmet så att det körs i en programpool som är konfigurerad för integrerat läge.

  4. Bläddra till test.aspx.