Сообщение об ошибке при посещении веб-сайта, размещенного в 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-разрядных приложений.
Решение
Чтобы устранить эту проблему, настройте пул приложений, на котором размещено приложение, для выполнения всех предварительных условий, заданных обработчиком.
Открытие диспетчера IIS
Разверните имя компьютера и щелкните пулы приложений в левой области.
Выделите пул приложений, на котором размещен ресурс на средней панели.
В правой области щелкните " Дополнительные параметры" ...
В диалоговом окне "Дополнительные параметры" в категории (общие) настройте следующие параметры для соответствия требованиям обработчика:
- Версия платформы .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" />
Шаги для воспроизведения
Создайте каталог, содержащий два файла.
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>
Создайте приложение IIS 7.0 или более поздней версии, указывающее на каталог с этими двумя файлами.
Настройте новое приложение для запуска в пуле приложений, настроенном для интегрированного режима.
Перейдите к test.aspx.