Сообщение об ошибке при посещении веб-сайта, размещенного в IIS 7.0 или более поздних версий: ошибка HTTP 404.17 — не найдено

Эта статья поможет устранить ошибку HTTP 404.17 — не найдена при посещении веб-сайта, размещенного в службах IIS 7.0 или более поздних версий.

Оригинальная версия продукта: службы IIS
Исходный номер базы знаний: 2019689

Симптомы

У вас есть веб-сайт, размещенный в IIS 7.0 или более поздних версий. При переходе к динамическому содержимому на веб-сайте с помощью веб-браузера может появиться сообщение об ошибке, похожее на следующее:

Сводка по ошибкам
Ошибка HTTP 404.17 — не найдено
Запрошенный контент представляется скриптом и не будет обслуживаться обработчиком статических файлов.
Подробные сведения об ошибке:

Module StaticFileModule
Notification ExecuteRequestHandler
Обработчик StaticFile
0x80070032 кода ошибки

Запрошенный URL-адрес http://iisserver:80/page.aspx
Физический путь C:\inetpub\wwwroot\page.aspx
Анонимный метод входа
Анонимный пользователь входа

Причина

Эта ошибка возникает из-за того, что обработчик HTTP, настроенный для обработки запроса, имеет определенные предварительные условия, но его пул приложений не соответствует некоторым или всем этим предварительным требованиям. Это приводит к использованию обработчика статических файлов для обработки запроса. Обработка запроса завершается сбоем, и возвращается состояние 404.17 , так как запрос предназначен для динамического ресурса, а не для статического.

Например, рассмотрим следующее сопоставление обработчика:

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

В этом случае возвращается ошибка 404.17, если ресурс *.aspx, запрашиваемый с сайта, обрабатывается в пуле приложений, который не работает в Classic режиме, не является 32-разрядным или не работает в версии 2.0 платформа .NET Framework. Для правильного обслуживания ресурса в этом примере необходимо выполнить все три предварительных условия. В частности, пул приложений, в котором размещается этот ресурс, должен быть настроен для Classic режима, он должен быть настроен для использования версии 2.0 платформа .NET Framework, а также для 32-разрядных приложений.

Разрешение

Чтобы устранить эту проблему, настройте пул приложений, в котором размещается приложение, в соответствии со всеми предварительными условиями, заданными для обработчика.

  1. Открытие диспетчера IIS

  2. Разверните имя компьютера и щелкните Пулы приложений в левой области.

  3. Выделите пул приложений, в котором размещен ресурс, на средней панели.

  4. В правой области щелкните Дополнительные параметры...

  5. В диалоговом окне Дополнительные параметры в категории (Общие) настройте следующие параметры в соответствии с требованиями обработчика:

    • версия платформа .NET Framework
    • Включение 32-разрядных приложений
    • Режим управляемого конвейера

Дополнительная информация

Сведения в этом разделе помогут определить, какие обработчики настроены для веб-сайта и приложения, упомянутых в ошибке, а также определить предварительные условия, настроенные для этого обработчика.

команды Appcmd.exe

Следующие команды можно использовать для определения обработчиков, настроенных для веб-сайта, указанного в выходных данных ошибки.

Вывод списка пула приложений

В следующих командах показано, как определить, в каком пуле приложений выполняется приложение, а затем перечислить предварительные условия, настроенные для этого пула приложений.

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)

Обработчики списка

Эта команда выводит обработчики, настроенные для конкретного приложения на веб-сайте по умолчанию.

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>

В случае ASP.NET для ресурса *.aspx может быть настроено множество обработчиков. В некоторых случаях обработчик может просто быть изменен в соответствии с пулом приложений, в котором выполняется приложение. Ниже приведен список различных обработчиков ASP.NET 2.0 с различными параметрами предварительных условий.

  • 32/64-разрядный обработчик интегрированного режима ASP.NET 2.0

    <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" 
         type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode" />
    
  • 32-разрядный обработчик классического режима 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-разрядный обработчик классического режима 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" />
    

Действия по воспроизведению

  1. Создайте каталог, содержащий два файла.

    • Test.aspx с содержимым <%Response.Write("Hello World")%>

    • Web.config с содержимым:

      <?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. Создайте приложение IIS 7.0 или более поздней версии, которое указывает на каталог с этими двумя файлами.

  3. Настройте новое приложение для запуска в пуле приложений, настроенном для интегрированного режима.

  4. Перейдите к test.aspx.