Обробник “ExtensionlessUrlHandler-Integrated-4.0” має поганий модуль “ManagedPipelineHandler” у своєму списку модулів


252

Якщо чесно кажучи, я намагався перетворити брудний трюк на IIS і просто, коли думав, що збираюся піти звідти, зрозумів, що мій спосіб вирішення проблем не працює. Ось що я намагався зробити:

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

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

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

4) Тепер приходить брудна частина ... Я намагався зробити запит GET з коду в кінці методу Preload , і він спрацював. Але це рішення мені здалося поганим, хоча воно спрацювало. Отже, я спробував багато чого, і останнє, що я спробував, це:

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

... і це зробило його призначення. * Application_Start * був викликаний, (я перевірив відповідь, він містив сторінку входу, яка повинна була відображатися в початковому запиті), і програма закриття пулу Application завершилася витончено, виконавши необхідну роботу в * Application_End *.

АЛЕ

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

Помилка HTTP 500.21 - Внутрішній обробник помилок сервера "ExtensionlessUrlHandler-Integrated-4.0" має поганий модуль "ManagedPipelineHandler" у своєму списку модулів

Я не в змозі це зрозуміти. Хтось може мені сказати, чому це відбувається і як це виправити?

Якщо я цього не зрозумію, я повернусь до першого рішення (надсилання GET-запиту з коду), але ця проблема помилить мене, оскільки я навіть не маю уявлення, що не так.


яку версію IIS ви використовуєте?
chue x

IIS 7.5 (7.5.7600.16385)
Іван Перич

Це не пряма відповідь на ваше запитання, але для інших користувачів, які мають подібну проблему та вважають, що у вас є Інтернет-додаток: ви можете просто скористатися зовнішньою службою, наприклад uptimerobot.com, щоб торкатися вашої програми кожні X час. Ви зберігаєте додаток у робочому стані + у вас є додаткові переваги послуги (тривалість роботи, сповіщення тощо).
qbantek

@qbantek Хоча додаток, над яким я працюю, не є інтернетом, ви дали мені гарну ідею. Я міг би використовувати балансир навантаження для періодичного дотику, встановивши тип перевірки стану здоров’я на Simple HTTP GET. Дякую
Іван Перич

Відповіді:


24

Проблема

Ви використовуєте SimpleWorkerRequest у сценарії, для якого він не був розроблений. Ви використовуєте його всередині IIS . Якщо ви подивитесь на попереднє посилання MSDN (акцент - мій):

Забезпечує просту реалізацію абстрактного класу HttpWorkerRequest, який може використовуватися для розміщення програм ASP.NET поза додатком Internet Information Services (IIS) . Ви можете використовувати SimpleWorkerRequest безпосередньо або розширити його.

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

Простір імен System.Web.Hosting надає функціональність для розміщення програм ASP.NET з керованих програм поза межами інформаційних служб Microsoft Internet (IIS) .

Рішення

Я рекомендую зняти дзвінок на SimpleWorkerRequest. Натомість ви можете використовувати рішення Microsoft, щоб переконатися, що ваш веб-сайт автоматично запускається після його повторного циклу. Вам потрібен модуль ініціалізації додатків Microsoft для IIS 7.5 . Налаштувати це не складно, але вам потрібно зрозуміти точні варіанти. Ось чому я також рекомендую інтерфейс ініціалізації додатків для IIS 7.5 . Інтерфейс призначений блогером MSDN.

Отже, що саме робить рішення Microsoft? Це робить те, що ви намагаєтесь - IIS надсилає на ваш веб-сайт запит "отримати" після запуску пулу додатків.


2
Я сподівався знайти рішення, яке можна реалізувати в коді, але це настільки ж близько до "достатньо доброго", як він отримує, тому я присуджую йому винагороду. Але я думаю, що рішення, яке надав @danijelk, буде найбільш корисним для більшості людей, які стикаються з цим питанням з інших причин, ніж я вказав. Отже, це записка для них, щоб поглянути на це.
Іван Перич

650

Спробуйте перереєструвати 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


Спасибі за вашу відповідь. Я вже спробував це, і це не вийшло. :( -
Осама ходрог

8
Не працює для Windows Server 2012. Прочитайте публікацію Зака ​​на цій сторінці.
Іван Акчеуров

Дякую. Працював для мене, роблячи це на віртуальній машині в Azure. Що хотілося б знати, хоча це мені доведеться робити це при новому встановленні. Безумовно, ASPNET реєструє себе, коли він встановлюється правильно? Я здогадуюсь, що це має щось спільне з порядком встановлення.
Давид Брідж

4
Якщо ви використовуєте .NET 4.5.x або 4.6.x, не обманюйте відповідь, в якій згадується 4.0, і думаєте, що він не стосується вас. Ця проблема може бути пов'язана з порядком встановлення .NET перед IIS, як це було для мене. Запуск команди (в моєму випадку 64-бітна версія) виправив її, навіть якщо моя програма використовує .NET 4.5.2.
Coxy

Windows 2008, свіжий встановити AWS мікросервер вимагав від мене виконати цю команду. Просто для тих із нас, хто вважає, що це не стосується їхньої системи.
терари

170

Якщо ви зіткнулися з цією помилкою в Windows 8 / Windows Server 2012 та .Net 4.5, дотримуйтесь цих інструкцій тут: http://www.britishdeveloper.co.uk/2013/01/handler-extensionlessurlhandler.html

Перейдіть до "вмикання чи вимкнення функцій Windows", потім Інтернет-інформаційні послуги, потім всесвітня веб-служба, потім функції розробки додатків, а потім увімкніть ASP.NET 4.5

Це працювало для мене (хоча майстер і формулювання дещо відрізняються в Windows Server 2012, але ви це зрозумієте). З огляду на це, чому це потрібно після встановлення всього через Інсталятор веб-платформ, включаючи всі залежності, зовсім поза мене ...


3
Налаштування Windows Server - це PITA. Чому не існує центральної системи управління пакетами?
Кугель

якщо ви встановили iis за допомогою веб-платформи, перевірте коментар Virgo139, це легко вирішило мою проблему
castors33

Це було виправданням для Windows 10 Pro build 1607, ура!
Апогей

Це зафіксувало і мене на WIndows 10. Варто зауважити, що загальне виправлення командного рядка (aspnet_regiis.exe -i) заборонено в Windows 10.
Nat Webb

Підтверджене рішення для Windows 10 Pro.
Zoomzoom

59

Незважаючи на дотримання більшості порад на цій сторінці, у мене все ще виникали проблеми на Windows Server 2012. Встановлення .NET Extensibility 4.5 вирішило це для мене:

Add Roles and Features > Server Roles > Web Server (IIS) > Web Server > Application Development > .NET Extensibility 4.5


2
Дякую, що ви написали це, я занадто довго дивився на Веб-сервер -> Веб-сервер -> Труба веб-сервера ... :)
Глено

2
Не забудьте перевірити Ролі та функції> Ролі сервера> Веб-сервер (IIS)> Веб-сервер> Розробка додатків> ASP.NET 4.6 (або 4.5 залежно від налаштувань)
Lionet Chen

1
Так, перезавантажте службу IIS. Працювали для мене! Дякую. +1
Іржавий ніготь

47

Для Windows 10 / Windows Server 2016 використовуйте таку команду:

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

Запропоновані відповіді з aspnet_regiisне працює в Windows 10 (оновлення Creators і пізнішої версії) або 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", інструмент управління сервером сервера або інструмент командного рядка dism.exe. Докладніше див. На веб-сторінці http://go.microsoft.com/fwlink/?LinkID=216771 .
Завершено встановлення ASP.NET (4.0.30319.0).

Цікаво, що діалогове вікно "Увімкнення / вимкнення функцій Windows" не дозволило мені знімати .NET або ASP.NET 4.6, і працювала лише вищезазначена команда DISM. Не впевнений чи FeatureName правильно, але він працював на мене.


Це для мене виправлено, я працював під керуванням Windows 10 pro з оновленням для творців. Дякую!
Семюель Пуарьє

Легендарна відповідь! Мені довелося відновити свій веб-сервер, і я не оновлював сценарії за кілька років, я додав цю команду DISM до моїх скриптів забезпечення VM, працює як шарм.
Кріс Шалер

dism / online / enable-feature / featurename: IIS-ASPNET45 / всі працювали для мене на Windows Server 2016
Syed Nasir Abbas

Завдяки вам у мене ще робота! :) Працювали.
Скотт

42

Виконайте одну з цих команд:

Для 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

Я помітив, роблячи це, папка "aspnet_client" додається на веб-сайт у каталозі сайтів підключень IIS
eaglei22

26

Цей https://stackoverflow.com/a/13266763/1277458 прекрасно працює. Але якщо у вас 64-розрядна операційна система, використовуйте Framework64 замість Framework на шляху:

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

FWIW, Server 2012 R2 каже, що цей параметр не підтримується, і пропонує використовувати діалогове вікно "Функція", щоб увімкнути ASP.NET 4.5
bvj

Так, відповідь Зака ​​охоплює це.
Нешта

13

У моєму випадку (Windows 10 + IIS 10) мені довелося відкрити " Увімкнення та вимкнення функцій Windows ", а потім перейти до Інтернет-інформаційних служб> Всесвітні веб-сервіси> Особливості розробки додатків> і перевірити ASP.NET 4.6


1
Моя була IIS на Windows 2012 R2. Додано сумісний ASP.NET в Менеджер сервера> Керування> Додати ролі та функції> Установка на основі ролей або функцій> (виберіть свій сервер)> Веб-сервер (IIS)> Веб-сервер> Розробка програм> ASP.NET 4.5. Як заявив @ArsmanAhmad, хороша перевірка правильності - це перевірити, чи для вашого пакета додатків .NET CLR Version встановлено v4.0.
ГБУ

6

Зробити це власною посадою, тому що це змушувало мене годинами.

Я бачив, можливо, десяток подібних дописів тут і деінде про цю проблему та виправлення aspnet_regiis. Вони не працювали на мене, і aspnet_regiis діяв дивно, просто перелічував варіанти тощо.

Як зазначено вище користувачем ryan-anderson, ви не можете ввести .exe

Для тих, хто менш комфортний із речами поза IIS на сервері, ось що ви робите простими кроками.

  1. Знайдіть aspnet_regiis у папці, подібній цьому шляху. c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \

  2. Клацніть правою кнопкою миші командний рядок у меню "Пуск" або в будь-якому місці та скажіть йому, що він працює як адміністратор. Використання функції Windows "Запустити" просто не спрацює або не зробило мене.

  3. Поверніться до виконуваного файлу aspnet_regiis. Клацніть та перетягніть його прямо в командний рядок або скопіюйте вставити адресу в командний рядок.

  4. Видаліть, якщо він є, наприкінці .exe. Це ключове. У кінці додайте -i (простір мінус око). Введіть.

Якщо ви зробили це правильно, ви побачите, що він починає встановлювати asp.net, а потім повідомляє вам, що це вдалося.


Для мене прекрасно працювали. Дякую.
Майк

5

Переконайтеся, що ви встановили свою application-siteверсію з v2.0у v4.0в IIS Manager :

Пули програм> Ваша програма> Розширені налаштування> .NET Framework Version

Після цього встановіть свій 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 і насолоджуйтесь.


Так, я намагався зробити все найпростішим. ;-) @yuyangJian
Арсман Ахмад

4

Я знаю, що це старий, але подумав, що я можу додати певної цінності. Для тих, хто працює з сердечним ядром за межами домену (члени домену можуть просто запускати диспетчер сервера для віддалення / видалення функцій / ролей), вам доведеться вдатися до командних рядків.

Користувачі Powershell можуть ввести "Install-WindowsFeature Web-Asp-Net45"

Це має бути рівнозначно використанню менеджера сервера.


4

Мене оскаржило те саме повідомлення про помилку, у якому встановлено .net 4.7.

Рішення полягало в тому, щоб дотримуватися одного раніше згаданого повідомлення, щоб перейти з функцією "Увімкнути або вимкнути функцію Windows", де "NNET Framework 4.7 Advanced Services" -> "ASP.NET 4.7" вже була перевірена.

Далі в списку є "Інформаційні послуги Інтернету" та підмет "Особливості розробки додатків" -> "ASP.NET 4.7", що також потрібно перевірити.

Увімкнувши це, увімкнено всі інші функції ... Я просто натиснув кнопку ОК, і проблема була вирішена. Прокрутка вікна функцій вікна


Додам, що це було видання Windows 10 pro
theodor.johannesen

2

Я працюю над Windows Server 2012. Увімкнена функція .NET Extensibility 4.5. WebDAVModule видалено. Я все ще отримував помилку 500,21 на маршруті ASP.NET '/ docs'.

Зміна "skipManagedModules" на помилкову усунула проблему.

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

Завдяки https://groups.google.com/forum/#!topic/bonobo-git-server/GbdMXdDO4tI


2

Я вирішив цю проблему, додавши в "Увімкнення та вимкнення функцій Windows" Параметр ASP.NET 4.7

введіть тут опис зображення


1

У мене виникла ця проблема і з’ясувалося, що видалення наступної папки допомогло навіть із неекспрес-версією.

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


1

Ця помилка почала траплятися зі мною нізвідки минулого тижня, торкнувшись існуючих веб-сайтів на моїй машині. Мені не пощастило спробувати будь-яку пропозицію тут. Врешті-решт я повністю видалив WebDAV з IIS (Особливості Windows -> Інформаційні послуги Інтернету -> Всесвітні веб-сервіси -> Загальні функції HTTP -> Публікація WebDAV). Після цього я зробив скидання IIS для гарної міри, і моя помилка була остаточно усунена.

Я можу лише здогадуватися, що оновлення Windows почало проблему, але я не можу бути впевнений.


Просто було те саме питання. Встановлено кілька оновлень Windows, які змінилися навколо моїх параметрів IIS. Вимкнення публікації WebDAV виправлено заново.
ElliotSchmelliot

0

Ви можете виправити це, змінивши тип "ExtensionlessUrlHandler-Integrated-4.0" в iis на System.Web.DefaultHttpHandler


0

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

Мені вдалося виправити це, відключивши WebDAV для індивідуального пулу додатків, це зупинило помилку 'поганий модуль' під час використання PUTабо DELETE.

Вимкнути WebDAV для індивідуального пулу додатків:

  1. Клацніть на пулі програм із зазначенням впливу
  2. Знайдіть WebDAV Authoring Toolsу списку
  3. Клацніть, щоб відкрити його
  4. Клацніть Disable WebDAVу верхньому правому куті.

Та даааа!

Я все ще залишив видалити елементи у своєму web.configфайлі.

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

На цьому посиланні я знайшов інструкції, але це не дуже зрозуміло.


0

Це може бути не корисним рішенням для ОП, але це стосується того самого повідомлення про помилку.

Ми розміщуємо сторінки PHP на IIS8.5 з правильно встановленою .NET 4.5.

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

Через деякий час ми почали отримувати цю помилку навмання.

У web.config: Я ставлю skipManagedModules до істинного, -> не роби цього!

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

Хоча веб-сайт є php, маршрутизацією до підкачки керують модулі !!!


0

Я також зіткнувся з цією проблемою. Мій додаток MVC4 працює на Windows Server 2012 R2 з IIS 8.5. Жодне з цих розміщених рішень не працювало для мене ... встановлення відсутніх фреймворків за допомогою функцій IIS не могло це вирішити, але установка завжди провалювалася.

Мені довелося скористатися Web Platform Installerта встановити наступні пакети:

введіть тут опис зображення


0

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

На панелі керування постачальника хостингу я включив реєстрацію помилок для IIS та ASP.Net. А потім дізнався, що помилка фактично брехала у відсутньому cshtml.


0

Встановлення .NET 4.7 працювало для мене. У мене було встановлено лише 3,5.введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.