Messaggio di errore quando si visita un sito Web ospitato in IIS 7.0 o versioni successive: Errore HTTP 404.17 - Non trovato

Questo articolo consente di risolvere il problema di errore HTTP 404.17 - Non trovato quando si visita un sito Web ospitato in Internet Information Services (IIS) 7.0 o versioni successive.

Versione originale del prodotto: Internet Information Services
Numero KB originale: 2019689

Sintomi

Si dispone di un sito Web ospitato in IIS 7.0 o versioni successive. Quando si passa al contenuto dinamico nel sito Web usando un Web browser, è possibile che venga visualizzato un messaggio di errore simile al seguente:

Riepilogo degli errori
Errore HTTP 404.17 - Non trovato
Il contenuto richiesto sembra essere uno script e non verrà servito dal gestore di file statici.
Informazioni dettagliate sugli errori:

Module StaticFileModule
Notification ExecuteRequestHandler
Handler StaticFile
Codice di errore 0x80070032

URL richiesto http://iisserver:80/page.aspx
Percorso fisico C:\inetpub\wwwroot\page.aspx
Metodo di accesso anonimo
Utente di accesso anonimo

Causa

Questo errore si verifica perché il gestore HTTP configurato per gestire la richiesta ha alcune precondizioni impostate, ma il relativo pool di applicazioni non soddisfa alcune o tutte queste precondizioni. In questo modo, il gestore di file statici viene usato per elaborare la richiesta. L'elaborazione della richiesta ha quindi esito negativo e viene restituito lo stato 404.17 perché la richiesta è relativa a una risorsa dinamica e non statica.

Si consideri, ad esempio, il mapping del gestore seguente:

<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 questo caso, viene restituito un errore 404.17 se la risorsa *.aspx richiesta dal sito viene gestita in un pool di applicazioni che non è in esecuzione in Classic modalità, non è a 32 bit o non esegue la versione 2.0 di .NET Framework. Affinché la risorsa venga servita correttamente in questo esempio, è necessario soddisfare tutte e tre le condizioni preliminari. In particolare, il pool di applicazioni che ospita questa risorsa deve essere configurato per Classic la modalità, deve essere configurato per usare la versione 2.0 di .NET Framework e deve essere impostato per le applicazioni a 32 bit.

Risoluzione

Per risolvere questo problema, configurare il pool di applicazioni che ospita l'applicazione per soddisfare tutte le condizioni preliminari impostate per il gestore.

  1. Aprire Gestione IIS

  2. Espandere il nome del computer e fare clic su Pool di applicazioni nel riquadro sinistro.

  3. Evidenziare il pool di applicazioni che ospita la risorsa nel riquadro centrale.

  4. Nel riquadro all'estrema destra fare clic su Impostazioni avanzate...

  5. Nella finestra di dialogo Impostazioni avanzate nella categoria (Generale) configurare le impostazioni seguenti in modo che corrispondano ai requisiti del gestore:

    • Versione di .NET Framework
    • Abilitare le applicazioni a 32 bit
    • Modalità pipeline gestita

Ulteriori informazioni

Le informazioni contenute in questa sezione consentono di identificare i gestori configurati per il sito Web e l'applicazione indicati nell'errore, nonché di identificare le condizioni preliminari configurate per tale gestore.

comandi Appcmd.exe

I comandi seguenti possono essere usati per identificare i gestori configurati per il sito Web elencati nell'output dell'errore.

Elencare il pool di applicazioni

I comandi seguenti illustrano come determinare il pool di applicazioni in cui è in esecuzione l'applicazione e quindi elencare le precondizioni configurate per il pool di applicazioni.

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)

Gestori elenco

Questo comando restituisce i gestori configurati per l'applicazione specifica nel sito Web predefinito.

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>

Nel caso di ASP.NET, potrebbero essere presenti molti gestori configurati per una risorsa *.aspx. In alcuni casi, potrebbe essere sufficiente modificare il gestore in modo che corrisponda al pool di applicazioni in cui è in esecuzione l'applicazione. Di seguito è riportato un elenco dei diversi gestori di ASP.NET 2.0 con le varie impostazioni di pre-condizione.

  • ASP.NET gestore a 32/64 bit in modalità integrata 2.0

    <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" 
         type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
    
  • ASP.NET gestore a 32 bit in modalità classica 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" />
    
  • Gestore a 64 bit della modalità classica 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" />
    

Passaggi da riprodurre

  1. Creare una directory contenente due file.

    • Test.aspx con il contenuto <%Response.Write("Hello World")%>

    • Web.config con il contenuto:

      <?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. Creare un'applicazione IIS 7.0 o versioni successive che punta alla directory con questi due file.

  3. Configurare la nuova applicazione per l'esecuzione in un pool di applicazioni configurato per la modalità integrata.

  4. Passare a test.aspx.