Message d’erreur lorsque vous visitez un site Web hébergé sur IIS 7.0 ou versions ultérieures : Erreur HTTP 404.17 - Introuvable

Cet article vous aide à résoudre le problème erreur HTTP 404.17 - Introuvable lorsque vous visitez un site Web hébergé sur Internet Information Services (IIS) 7.0 ou versions ultérieures.

Version du produit d’origine : Internet Information Services
Numéro de la base de connaissances d’origine : 2019689

Symptômes

Vous disposez d’un site Web hébergé sur IIS 7.0 ou versions ultérieures. Lorsque vous accédez à du contenu dynamique dans le site Web à l’aide d’un navigateur Web, vous pouvez recevoir un message d’erreur semblable au suivant :

Résumé des erreurs
Erreur HTTP 404.17 - Introuvable
Le contenu demandé semble être un script et n’est pas servi par le gestionnaire de fichiers statiques.
Informations détaillées sur l’erreur :

Module StaticFileModule
Notification ExecuteRequestHandler
Handler StaticFile
Code d’erreur 0x80070032

URL demandée http://iisserver:80/page.aspx
Chemin physique C :\inetpub\wwwroot\page.aspx
Logon, méthode anonyme
Utilisateur d’ouverture de session anonyme

Cause

Cette erreur se produit parce que le gestionnaire HTTP configuré pour gérer la requête a certaines conditions préalables définies, mais que son pool d’applications ne respecte pas tout ou partie de ces conditions préalables. Cela entraîne l’utilisation du gestionnaire de fichiers statiques pour traiter la demande à la place. Le traitement de la demande échoue alors et la version 404.17 status retournée, car la demande concerne une ressource dynamique et non une ressource statique.

Par exemple, considérez le mappage de gestionnaire suivant :

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

Dans ce cas, une erreur 404.17 est retournée si la ressource *.aspx demandée au site est gérée dans un pool d’applications qui n’est pas en Classic mode, n’est pas 32 bits ou n’exécute pas la version 2.0 du .NET Framework. Pour que la ressource soit correctement servie dans cet exemple, les trois conditions préalables doivent être remplies. Plus précisément, le pool d’applications hébergeant cette ressource doit être configuré pour Classic le mode, il doit être configuré pour utiliser la version 2.0 du .NET Framework, et il doit être défini pour les applications 32 bits.

Résolution

Pour résoudre ce problème, configurez le pool d’applications hébergeant l’application pour qu’il réponde à toutes les conditions préalables définies pour le gestionnaire.

  1. Ouvrir le Gestionnaire des services Internet

  2. Développez le nom de l’ordinateur et cliquez sur Pools d’applications dans le volet gauche.

  3. Mettez en surbrillance le pool d’applications hébergeant la ressource dans le volet central.

  4. Dans le volet tout à droite, cliquez sur Paramètres avancés...

  5. Dans la boîte de dialogue Paramètres avancés , sous la catégorie (Général), configurez les paramètres suivants pour qu’ils correspondent aux exigences du gestionnaire :

    • Version du .NET Framework
    • Activer les applications 32 bits
    • Mode pipeline managé

Plus d’informations

Les informations contenues dans cette section sont destinées à identifier les gestionnaires configurés pour le site web et l’application mentionnés dans l’erreur, ainsi qu’à identifier les conditions préalables configurées pour ce gestionnaire.

commandes Appcmd.exe

Les commandes suivantes peuvent être utilisées pour identifier les gestionnaires configurés pour le site web répertoriés dans la sortie de l’erreur.

Lister le pool d’applications

Les commandes suivantes montrent comment déterminer le pool d’applications dans lequel l’application s’exécute, puis répertorier les conditions préalables configurées pour ce pool d’applications.

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)

Répertorier les gestionnaires

Cette commande génère les gestionnaires configurés pour l’application spécifique dans le site web par défaut.

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>

Dans le cas de ASP.NET, de nombreux gestionnaires peuvent être configurés pour une ressource *.aspx. Dans certains cas, le gestionnaire peut simplement avoir besoin d’être modifié pour correspondre au pool d’applications dans lequel l’application s’exécute. Vous trouverez ci-dessous une liste des différents gestionnaires ASP.NET 2.0 avec leurs différents paramètres de pré-condition.

  • Gestionnaire 32/64 bits en mode intégré ASP.NET 2.0

    <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" 
         type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
    
  • Gestionnaire 32 bits ASP.NET 2.0 en mode classique

    <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" />
    
  • Gestionnaire 64 bits ASP.NET 2.0 en mode classique

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

Étapes de reproduction

  1. Créez un répertoire qui contient deux fichiers.

    • Test.aspx avec le contenu <%Response.Write("Hello World")%>

    • Web.config avec le contenu :

      <?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. Créez une application IIS 7.0 ou ultérieure qui pointe vers le répertoire contenant ces deux fichiers.

  3. Configurez la nouvelle application pour qu’elle s’exécute dans un pool d’applications configuré pour le mode intégré.

  4. Accédez à test.aspx.