Udostępnij za pośrednictwem


Komunikat o błędzie podczas odwiedzania witryny sieci Web hostowanej w usługach IIS 7.0 lub nowszych wersjach: Błąd HTTP 404.17 — nie znaleziono

Ten artykuł pomaga rozwiązać problem z błędem HTTP 404.17 — nie znaleziono podczas odwiedzania witryny sieci Web hostowanej w usługach Internet Information Services (IIS) w wersji 7.0 lub nowszej.

Oryginalna wersja produktu: Internet Information Services
Oryginalny numer KB: 2019689

Symptomy

Masz witrynę sieci Web hostowaną w usługach IIS 7.0 lub nowszych. Podczas przeglądania zawartości dynamicznej w witrynie sieci Web przy użyciu przeglądarki sieci Web może zostać wyświetlony komunikat o błędzie podobny do następującego:

Podsumowanie błędu
Błąd HTTP 404.17 — nie znaleziono
Żądana zawartość wydaje się być skryptem i nie będzie obsługiwana przez statyczną procedurę obsługi plików.
Szczegółowe informacje o błędzie:

Moduł StaticFileModule
Notification ExecuteRequestHandler
StaticFile programu obsługi
Kod błędu 0x80070032

Żądany adres URL http://iisserver:80/page.aspx
Ścieżka fizyczna C:\inetpub\wwwroot\page.aspx
Metoda logowania anonimowa
Użytkownik logowania anonimowy

Przyczyna

Ten błąd występuje, ponieważ program obsługi HTTP skonfigurowany do obsługi żądania ma określone warunki wstępne, ale jego pula aplikacji nie spełnia niektórych lub wszystkich tych warunków wstępnych. Powoduje to użycie statycznego programu obsługi plików do przetworzenia żądania. Przetwarzanie żądania kończy się niepowodzeniem i zwrócono stan 404.17 , ponieważ żądanie dotyczy zasobu dynamicznego, a nie statycznego.

Rozważmy na przykład następujące mapowanie programu obsługi:

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

W takim przypadku zwracany jest błąd 404.17, jeśli zasób *.aspx żądany z lokacji jest obsługiwany w puli aplikacji, która nie jest uruchomiona w Classic trybie, nie jest 32-bitowy lub nie jest uruchomiona wersja 2.0 .NET Framework. Aby zasób był prawidłowo obsługiwany w tym przykładzie, muszą zostać spełnione wszystkie trzy warunki wstępne. W szczególności pula aplikacji hostująca ten zasób musiałaby zostać skonfigurowana pod kątem Classic trybu, należy ją skonfigurować tak, aby używała wersji 2.0 .NET Framework i musiałaby zostać ustawiona dla aplikacji 32-bitowych.

Rozwiązanie

Aby rozwiązać ten problem, skonfiguruj pulę aplikacji hostującą aplikację tak, aby spełniała wszystkie warunki wstępne ustawione dla programu obsługi.

  1. Otwieranie Menedżera usług IIS

  2. Rozwiń nazwę komputera i kliknij pozycję Pule aplikacji w okienku po lewej stronie.

  3. Wyróżnij pulę aplikacji hostującą zasób w środkowym okienku.

  4. W okienku po prawej stronie kliknij pozycję Ustawienia zaawansowane...

  5. W oknie dialogowym Ustawienia zaawansowane w kategorii (Ogólne) skonfiguruj następujące ustawienia, aby były zgodne z wymaganiami programu obsługi:

    • wersja .NET Framework
    • Włączanie aplikacji 32-bitowych
    • Tryb potoku zarządzanego

Więcej informacji

Informacje zawarte w tej sekcji ułatwiają określenie, które programy obsługi są skonfigurowane dla witryny internetowej i aplikacji wymienionej w błędzie, a także pomagają zidentyfikować warunki wstępne skonfigurowane dla tego programu obsługi.

polecenia Appcmd.exe

Poniższe polecenia mogą służyć do identyfikowania procedur obsługi skonfigurowanych dla witryny sieci Web wymienionych w danych wyjściowych błędu.

Wyświetlanie listy puli aplikacji

Poniższe polecenia pokazują, jak określić pulę aplikacji, w której działa aplikacja, a następnie wyświetlić listę warunków wstępnych skonfigurowanych dla tej puli aplikacji.

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)

Programy obsługi listy

To polecenie spowoduje wyświetlenie danych wyjściowych programów obsługi skonfigurowanych dla określonej aplikacji w domyślnej witrynie sieci Web.

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>

W przypadku ASP.NET może istnieć wiele procedur obsługi skonfigurowanych dla zasobu *.aspx. W niektórych przypadkach program obsługi może wymagać tylko zmiany w celu dopasowania do puli aplikacji, w której działa aplikacja. Poniżej znajduje się lista różnych programów obsługi ASP.NET 2.0 z różnymi ustawieniami warunku wstępnego.

  • ASP.NET 32/64-bitowa obsługa trybu zintegrowanego w wersji 2.0

    <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" 
         type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
    
  • 32-bitowa obsługa trybu klasycznego ASP.NET 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" />
    
  • 64-bitowa obsługa trybu klasycznego ASP.NET 2.0

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

Kroki do odtworzenia

  1. Utwórz katalog zawierający dwa pliki.

    • Test.aspx z zawartością <%Response.Write("Hello World")%>

    • Web.config z zawartością:

      <?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. Utwórz aplikację usług IIS w wersji 7.0 lub nowszej, która wskazuje katalog z tymi dwoma plikami.

  3. Skonfiguruj nową aplikację do uruchamiania w puli aplikacji skonfigurowanej pod kątem trybu zintegrowanego.

  4. Przejdź do test.aspx.