Обработчик «ExtensionlessUrlHandler-Integrated-4.0» имеет неверный модуль «ManagedPipelineHandler» в своем списке модулей

207

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

1) У меня есть приложение ASP.NET, у которого есть класс Preloader, который наследует IProcessHostPreloadClient и выполняет всю тяжелую инициализацию в реализации метода Preload (приложение является сложным и является частью огромной системы, поэтому для установления соединений со всеми необходимыми службами требуется примерно 2 минуты и предварительная регистрация некоторых записей Unity).

2) У меня есть много работы, которая должна быть выполнена при завершении работы приложения (отмена подписки, отключение, удаление,...), и я думаю, что лучшее место для этого - это метод * Application_End *, расположенный в Global.asax.

3) Все работает очень хорошо, когда у меня есть активность пользователя (первый запрос после пула приложений, который содержит вышеупомянутое веб-приложение, будет вызван вызовом * Application_Start *, а затем * Application_End * вызывается при запуске или переработке пула приложений), но проблемы возникают, когда нет активности пользователя, и приложение пытается перезапустить себя после того, как оно было активным в течение 48 часов (настроенное требование). Поскольку запросов не было, заявка официально не началась. Ergo, он не может быть изящно остановлен, так как * Application_End * не будет вызываться.

4) Теперь идет грязная часть... Я попытался сделать запрос GET из кода в конце метода Preload, и он сработал. Но это решение показалось мне плохой, хотя это сработало. Итак, я пробовал много вещей, и последнее, что я пробовал, было следующим:

SimpleWorkerRequest swr = new SimpleWorkerRequest(string.Empty, string.Empty, tw);
HttpRuntime.ProcessRequest(swr);

... и это сделало это. * Был вызван Application_Start * (я проверил ответ, он содержал страницу входа, которая должна отображаться в первоначальном запросе), и приложение приложения останова приложения закончилось изящно, выполнив необходимую работу в * Application_End *.

НО

После запуска приложения (предварительно загруженного и инициированного) таким образом, это произошло, когда я захотел обратиться к приложению через веб-браузер:

Ошибка HTTP 500.21 - Внутренняя ошибка сервера Обработчик "ExtensionlessUrlHandler-Integrated-4.0" имеет плохой модуль "ManagedPipelineHandler" в своем списке модулей

Я не могу понять это. Может кто-нибудь сказать мне, почему это происходит и как это исправить?

Если я этого не понимаю, я вернусь к первому решению (отправив запрос GET из кода), но эта проблема будет ошибкой, так как у меня даже нет идеи, что неправильно.

  • 0
    какую версию IIS вы используете?
  • 0
    IIS 7.5 (7.5.7600.16385)
Показать ещё 2 комментария
Теги:
iis
web-applications

19 ответов

19
Лучший ответ

Проблема

Вы используете SimpleWorkerRequest в сценарии, для которого он не предназначен. Вы используете его внутри IIS. Если вы посмотрите на предыдущую ссылку MSDN (акцент мой):

Обеспечивает простую реализацию абстрактного класса HttpWorkerRequest, который может быть использован для размещения приложений ASP.NET вне приложения IIS.. Вы можете использовать SimpleWorkerRequest напрямую или расширить его.

Кроме того, если вы посмотрите документацию MSDN для пространства имен System.Web.Hosting (SimpleWorkerRequest находится в этом пространстве имен), вы также увидит нечто похожее на вышеизложенное (опять же, мой удар):

Пространство имен System.Web.Hosting предоставляет возможности для размещения приложений ASP.NET из управляемых приложений за пределами Microsoft Internet Information Services (IIS).

Решение

Я бы рекомендовал удалить вызов SimpleWorkerRequest. Вместо этого вы можете использовать решение Microsoft, чтобы убедиться, что ваш веб-сайт автоматически запускается после его повторного использования. Вам нужен Microsoft Модуль инициализации приложений для IIS 7.5. Это не сложно настроить, но вам нужно понять точные параметры. Вот почему я также рекомендую Инициализация приложений для IIS 7.5. Пользовательский интерфейс написан блогером MSDN.

Так что же делает решение Microsoft? Он делает то, что вы пытаетесь сделать - IIS отправляет запрос "получить" на ваш сайт после запуска пула приложений.

  • 1
    Я прыгал, чтобы найти решение, которое может быть реализовано в коде, но оно настолько близко к «достаточно хорошему», насколько это возможно, поэтому я присуждаю ему награду. Но я думаю, что решение, которое предоставил @danijelk, будет наиболее полезным для большинства людей, которые сталкиваются с этим вопросом по причине, отличной от указанной мной. Так что это записка для них, чтобы взглянуть на это.
592

Попробуйте перерегистрировать ASP.NET с помощью aspnet_regiis -i. Это сработало для меня.

Вероятный путь для .NET 4 (из командной строки с повышенными правами):

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

http://forums.iis.net/p/1190643/2026401.aspx

  • 0
    Спасибо за ваш ответ. Я уже попробовал это, и это не сработало. :( -
  • 8
    Не работает для Windows Server 2012. Прочтите сообщение Зака на этой странице.
Показать ещё 2 комментария
128

Если вы столкнулись с этой ошибкой с Windows 8/Windows Server 2012 и .Net 4.5, выполните следующие инструкции: http://www.britishdeveloper.co.uk/2013/01/handler-extensionlessurlhandler.html

Перейдите в "включить или отключить функции Windows" Затем Internet Information Services Затем World Wide Web Services Затем функции разработки приложений А затем включите ASP.NET 4.5

Это сработало для меня (хотя в Windows Server 2012 мастер и формулировка немного отличаются, но вы поймете это). С учетом сказанного, почему это необходимо после установки всего через установщик веб-платформы, в том числе все зависимости полностью вне меня...

  • 2
    Настройка Windows Server - это PITA. Почему нет центральной системы управления пакетами?
  • 0
    если вы установили iis с веб-платформой, проверьте комментарий Virgo139, это легко решило мою проблему
Показать ещё 2 комментария
38

Несмотря на то, что многие советы на этой странице остались, у меня все еще возникали проблемы с Windows Server 2012. Установка .NET Extensibility 4.5 (Добавить роли и функции > Роли серверa > Веб-сервер (IIS) > Веб-сервеp > Разработка приложений > .NET Extensibility 4.5) разрешил это для меня.

  • 2
    Спасибо за разъяснение, я слишком долго смотрел на Веб-сервер -> Веб-сервер -> Канал веб-сервера ... :)
  • 0
    Не забудьте проверить Роли и функции> Роли сервера> Веб-сервер (IIS)> Веб-сервер> Разработка приложений> ASP.NET 4.6 (или 4.5 в зависимости от вашей настройки)
Показать ещё 1 комментарий
31

Запустите одну из следующих команд:

Для 32-битной ОС Windows:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

Для 64-битной ОС Windows:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -I
  • 0
    Я заметил, что при этом папка «aspnet_client» добавляется на веб-сайт в каталоге «Sites» IIS Connections.
24

Этот https://stackoverflow.com/questions/13162545/handler-extensionlessurlhandler-integrated-4-0-has-a-bad-module-managedpipeli работает отлично. Но если у вас есть 64-битная операционная система, используйте Framework64 вместо Framework в пути:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
  • 0
    FWIW, Server 2012 R2 говорит, что эта опция не поддерживается, и предлагает использовать диалог Feature для включения ASP.NET 4.5
  • 0
    Да, ответ Зака покрывает это.
Показать ещё 1 комментарий
12

Для Windows Server 2016 используйте следующую команду:

dism /online /enable-feature /featurename:IIS-ASPNET45 /all

Рекомендуемые ответы с aspnet_regiis не работают в Windows Server 2016:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
Microsoft (R) ASP.NET RegIIS версии 4.0.30319.0
Утилита администрирования для установки и удаления ASP.NET на локальном компьютере.
Авторское право (C) Корпорация Microsoft. Все права защищены.
Запустите установку ASP.NET(4.0.30319.0).
Эта опция не поддерживается в этой версии операционной системы. Администраторы должны вместо этого установить/удалить ASP.NET 4.5 с помощью IIS8 с помощью диалогового окна "Включение/выключение Windows-функций", инструмента управления диспетчером сервера или инструмента командной строки dis.exe. Подробнее см. http://go.microsoft.com/fwlink/?LinkID=216771.
Завершена установка ASP.NET(4.0.30319.0).

Интересно, что в диалоговом окне "Включение/выключение Windows-функций" мне не удалось отключить .NET или ASP.NET 4.6, и работала только вышеприведенная команда DISM. Не уверен, правильное ли featurename, но это сработало для меня.

  • 0
    Это исправило для меня, я работал под управлением Windows 10 Pro с обновлением создателя. Спасибо!
  • 0
    Легендарный ответ! Мне пришлось перестроить свой веб-сервер, и я не обновлял сценарии в течение нескольких лет, я добавил эту команду DISM в свои сценарии подготовки виртуальных машин, это работает как шарм.
11

В моем случае (Windows 10 + IIS 10) мне пришлось открыть " Включить или отключить Windows-функции", а затем перейти в "Информационные службы Интернета" > "Всемирные веб-службы" > "Возможности разработки приложений" > проверить ASP.NET 4.6

  • 1
    Мой был IIS на Windows 2012 R2. Добавлен совместимый ASP.NET в Диспетчер серверов> Управление> Добавить роли и компоненты> Установка на основе ролей или компонентов> (выберите сервер)> Веб-сервер (IIS)> Веб-сервер> Разработка приложений> ASP.NET 4.5. Как сказал @ArsmanAhmad, хорошая проверка работоспособности состоит в том, чтобы проверить, установлена ли ваша версия пула приложений .NET CLR на v4.0.
4

Я знаю, что это старина, но я подумал, что могу добавить некоторую ценность. Для тех из нас, у которых работает серверное ядро ​​вне домена (участники домена могут просто запускать диспетчер сервера удаленно, чтобы добавлять/удалять функции/роли), вам нужно обратиться к командам.

Пользователи Powershell могут ввести "Install-WindowsFeature Web-Asp-Net45"

Это должно быть эквивалентно использованию диспетчера сервера.

3

Создание этого собственного сообщения, потому что это заставило меня часами.

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

Как пользователь ryan-anderson, указанный выше, вы не можете ввести .exe

Для тех, кто менее приспособлен к вещам за пределами IIS на сервере, вот что вы делаете в простых шагах.

  • Найдите aspnet_regiis в папке, подобной этому пути. c:\Windows\Microsoft.NET\Framework\v4.0.30319\

  • Щелкните правой кнопкой мыши командную строку в меню "Пуск" или где угодно и скажите ей, чтобы она выполнялась как администратор. Использование окон "Run" функция просто не сработает или не для меня.

  • Вернитесь к исполняемому файлу aspnet_regiis. Перетащите его прямо в командную строку или скопируйте-вставьте адрес в командную строку.

  • Удалите, если он там,.exe в конце. Это ключ. Добавьте в конец -i (пробел минус глаз). Enter.

Если вы это сделаете правильно, вы увидите, что он начинает устанавливать asp.net, а затем сообщает, что это удалось.

  • 0
    Работал отлично для меня. Спасибо.
2

Убедитесь, что вы установили версию application-site с v2.0 на v4.0 в Диспетчер IIS:

Пулы приложений > Ваше приложение > Расширенные настройки > Версия .NET Framework

После этого установите ASP.NET.

Для 32-разрядной ОС (Windows):

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i

Для 64-разрядной ОС (Windows):

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i

Перезагрузите application-site в диспетчере IIS и наслаждайтесь.

  • 0
    Работает, спасибо !!!
  • 0
    Да, я изо всех сил старался сделать ответ максимально простым. ;-) @yuyangJian
1

Я работаю над Windows Server 2012. Функция .NET Extensibility 4.5 включена. Удалено WebDAVModule. Я по-прежнему получал ошибку 500.21 на маршруте/документах ASP.NET.

Изменение "skipManagedModules" на false устраняет проблему.

<applicationInitialization doAppInitAfterRestart="true" skipManagedModules="false">
        <add initializationPage="/docs" />    
</applicationInitialization>

Благодаря https://groups.google.com/forum/#!topic/bonobo-git-server/GbdMXdDO4tI

  • 0
    Это исправление, которое сработало для меня.
1

Эта ошибка начала происходить со мной из ниоткуда прошлой недели, затрагивая существующие веб-сайты на моей машине. Мне не повезло с этим, чтобы попробовать какие-либо предложения здесь. В конце концов я полностью удалил WebDAV из IIS (Windows Features → Internet Information Services → World Wide Web Services → Общие функции HTTP → Публикация WebDAV). После этого я сделал IIS reset для хорошей оценки, и моя ошибка была окончательно решена.

Я могу только догадываться, что обновление Windows запустило проблему, но я не могу быть уверен.

  • 0
    Просто была такая же проблема. Установил некоторые обновления Windows, которые переключались вокруг моих настроек IIS. Отключение публикации WebDAV исправило это снова.
1

У меня возникла эта проблема и выяснилось, что удаление следующей папки помогло, даже с не-Express edition.Express:

C:\Users\<user>\Documents\IISExpress

0

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

На панели управления хостинг-провайдера я включил ведение журнала ошибок для IIS и ASP.Net. А потом узнал, что ошибка на самом деле лежала в отсутствующем cshtml.

0

Я также столкнулся с этой проблемой. Приложение MVC4 работает на Windows Server 2012 R2 с IIS 8.5. Ни один из этих опубликованных решений не работал у меня... установка отсутствующих фреймворков через IIS-функции могла решить его, но установка всегда была неудачной.

Мне пришлось использовать Web Platform Installer и установить следующие пакеты:

Изображение 5980

0

Это, возможно, не полезное решение для OP, но оно относится к одному и тому же сообщению об ошибке.

Мы размещаем PHP-страницы на IIS8.5 с правильной установкой .NET 4.5.

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

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

В web.config: я помещаю skipManagedModules в true, → не делайте этого!

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
<applicationInitialization skipManagedModules="false" doAppInitAfterRestart="true">
  <add initializationPage="/" />
</applicationInitialization>
...

Хотя веб-сайт является php, маршрутизация на пейджинг управляется модулями!!!

0

Для меня удаление WebDAV с моего сервера заставило приложение вернуть сообщение 503 Service Unavailable Error при использовании PUT или DELETE, поэтому я снова установил его обратно. Я также попытался полностью удалить .NET Framework 4.5 и переустановить его, а также попытался перерегистрировать, как было предложено, но безрезультатно.

Я смог исправить это, отключив WebDAV для отдельного пула приложений, это остановило ошибку "плохого модуля" при использовании PUT или DELETE.

Отключить WebDAV для отдельного пула приложений:

  • Нажмите на удаленный пул приложений
  • Найти WebDAV Authoring Tools в списке
  • Нажмите, чтобы открыть его
  • Нажмите Disable WebDAV в верхнем правом углу.

Ta daaaa!

Я все еще оставил элементы удаления в файле web.config.

 <system.webServer>
    <modules>
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="WebDAV" />
    </handlers>
 <system.webServer>

Эта ссылка содержит инструкции, но это не очень понятно.

0

Вы можете исправить это, изменив тип "ExtensionlessUrlHandler-Integrated-4.0" в iis на System.Web.DefaultHttpHandler

Ещё вопросы

Сообщество Overcoder
Наверх
Меню