Поделиться через


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

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

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

Симптомы

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

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

Module StaticFileModule
Notification ExecuteRequestHandler
Статический файл обработчика
Код ошибки 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 с различными параметрами условий.

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

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