Udostępnij za pośrednictwem


Komunikat o błędzie podczas odwiedzania witryny internetowej hostowanej w programie IIS 7.0 lub nowszych wersjach: Błąd HTTP „404.17 — Nie odnaleziono”

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 w wersji 7.0 lub nowszej. 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 program obsługi plików statycznych.
Szczegółowe informacje o błędzie:

Moduł StaticFileModule
Notification ExecuteRequestHandler
Program obsługi staticfile
Kod błędu 0x80070032

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

Przyczyna

Ten błąd występuje, ponieważ program obsługi HTTP skonfigurowany do obsługi żądania ma określone warunki wstępne ustawione, ale jego pula aplikacji nie spełnia niektórych lub wszystkich tych warunków wstępnych. Spowoduje to użycie programu obsługi plików statycznych do przetworzenia żądania. Przetwarzanie żądania zakończy się niepowodzeniem, a stan 404.17 został zwrócony, 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 *.aspx żądany zasób z witryny jest obsługiwany w puli aplikacji, która nie działa w Classic trybie, nie jest 32-bitowa lub nie uruchamia wersji 2.0 programu .NET Framework. Aby zasób był poprawnie obsługiwany w tym przykładzie, wszystkie trzy warunki wstępne muszą zostać spełnione. W szczególności pula aplikacji hostująca ten zasób musiałaby być skonfigurowana dla Classic trybu. Należy ją skonfigurować tak, aby korzystała z wersji 2.0 programu .NET Framework i musiałaby być ustawiona dla aplikacji 32-bitowych.

Rozwiązanie

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

  1. Otwórz 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ąca 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 odpowiadały wymaganiom programu obsługi:

    • Wersja programu .NET Framework
    • Włączanie aplikacji 32-bitowych
    • Zarządzany tryb potokowy

Więcej informacji

Informacje w tej sekcji mają pomóc w zidentyfikowaniu procedur obsługi skonfigurowanych dla witryny internetowej i aplikacji wymienionej w błędzie, a także pomóc w zidentyfikowaniu warunków wstępnych skonfigurowanych dla tej procedury obsługi.

Appcmd.exe polecenia

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

Wyświetlanie listy puli aplikacji

Poniższe polecenia pokazują, w jaki sposób 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 wyświetli programy obsługi skonfigurowane 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 procedura obsługi może być po prostu konieczna, aby odpowiadała puli aplikacji uruchomionej w aplikacji. Poniżej znajduje się lista różnych procedur obsługi ASP.NET 2.0 z różnymi ustawieniami warunków wstępnych.

  • program obsługi ASP.NET 2.0 w trybie zintegrowanym 32/64-bitowym

    <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" 
         type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
    
  • ASP.NET program obsługi 32-bitowej w wersji 2.0 w wersji 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" />
    
  • program obsługi 64-bitowej ASP.NET 2.0 w trybie klasycznym

    <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 odtwarzania

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

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

    • Plik 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.