Честно говоря, я попытался сделать грязную уловку с IIS, и когда я подумал, что мне это сойдет с рук, я понял, что мой обходной путь не работает. Вот что я пытался сделать:
1) У меня есть приложение ASP.NET , который имеет Preloader класс , который наследует IProcessHostPreloadClient и делает все инициализацию тяжелый в натяг реализации метода (приложение является сложным , и это является частью огромной системы, поэтому она требует около 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 из кода), но эта проблема вызовет у меня ошибку, так как я даже не представляю, в чем дело.
источник
Ответы:
Эта проблема
Вы используете SimpleWorkerRequest в сценарии, для которого он не предназначен. Вы используете его внутри IIS . Если вы посмотрите на предыдущую ссылку MSDN (выделено мое):
Кроме того, если вы посмотрите документацию MSDN для пространства имен System.Web.Hosting (
SimpleWorkerRequest
находится в этом пространстве имен), вы также увидите нечто похожее на приведенное выше (опять же, выделение мое):Решение
Я бы порекомендовал удалить звонок на
SimpleWorkerRequest
. Вместо этого вы можете использовать решение Microsoft, чтобы обеспечить автоматический запуск вашего веб-сайта после его перезагрузки. Вам нужен модуль инициализации приложения Microsoft для IIS 7.5 . Это не сложно настроить, но вы должны понимать точные параметры. Вот почему я также рекомендовал бы интерфейс инициализации приложения для IIS 7.5 . Пользовательский интерфейс написан блоггером MSDN.Так что именно делает решение Microsoft? Он делает то, что вы пытаетесь сделать - IIS отправляет запрос «get» на ваш веб-сайт после запуска пула приложений.
источник
Попробуйте перерегистрировать ASP.NET в
aspnet_regiis -i
. Это сработало для меня.Вероятный путь для .NET 4 (из командной строки с повышенными правами):
http://forums.iis.net/p/1190643/2026401.aspx
источник
Если вы столкнулись с этой ошибкой в 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, но вы поймете это). С учетом вышесказанного, почему это необходимо после установки всего через установщик веб-платформы, включая все зависимости, полностью вне моего понимания ...
источник
Несмотря на то, что я следовал большинству советов на этой странице, у меня все еще возникали проблемы в Windows Server 2012. Установка .NET Extensibility 4.5 решила эту проблему для меня:
Add Roles and Features > Server Roles > Web Server (IIS) > Web Server > Application Development > .NET Extensibility 4.5
источник
Для Windows 10 / Windows Server 2016 используйте следующую команду:
dism /online /enable-feature /featurename:IIS-ASPNET45 /all
Предложенные ответы с
aspnet_regiis
не работают в Windows 10 (Creators Update и более поздних версиях) или Windows Server 2016:Интересно, что диалоговое окно «Включить / выключить функции Windows» не позволило мне снять флажки .NET или ASP.NET 4.6, и сработала только вышеуказанная команда DISM. Не уверен, правильно ли указано имя функции , но у меня это сработало.
источник
Запустите одну из следующих команд:
Для 32-битной ОС Windows:
Для 64-битной ОС Windows:
источник
Этот https://stackoverflow.com/a/13266763/1277458 работает отлично. Но если у вас 64-битная операционная система, используйте Framework64 вместо Framework в пути:
источник
В моем случае (Windows 10 + IIS 10) мне пришлось открыть « Включение или отключение компонентов Windows », а затем перейти к службам IIS> Службы всемирной паутины> Функции разработки приложений> и проверить ASP.NET 4.6.
источник
Создание этого собственного поста, потому что это заставило меня идти часами.
Я видел около десятка подобных сообщений здесь и в других местах об этой проблеме и исправлении aspnet_regiis. Они не работали для меня, и aspnet_regiis действовал странно, просто перечислял опции и т. Д.
Как указано выше пользователем ryan-anderson, вы не можете войти в .exe
Для тех, кто менее удобен для вещей вне IIS на сервере, вот что вы делаете в простых шагах.
Найдите aspnet_regiis в папке, похожей на этот путь. C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \
Щелкните правой кнопкой мыши командную строку в меню «Пуск» или в любом другом месте и скажите, чтобы она запускалась от имени администратора. Использование функции «Выполнить» в Windows просто не будет работать или не работает для меня.
Вернитесь к исполняемому файлу aspnet_regiis. Нажмите и перетащите его прямо в командную строку или скопируйте и вставьте адрес в командную строку.
Удалите, если он есть, .exe в конце. Это ключ. Добавьте -i (пробел минус глаз) в конце. Войти.
Если вы сделали это правильно, вы увидите, что он начинает устанавливать asp.net, а затем сообщает, что это удалось.
источник
Убедитесь , что вы установили
application-site
версию сv2.0
кv4.0
в диспетчере IIS :После этого установите свой
ASP.NET
.Для 32-битной ОС (Windows):
Для 64-битной ОС (Windows):
Перезапустите
application-site
в IIS Manager и наслаждайтесь.источник
Я знаю, что это старенький, но подумал, что мог бы добавить некоторую ценность. Для тех из нас, кто работает с Server Core за пределами домена (члены домена могут просто запускать Server Manager удаленно для добавления / удаления функций / ролей), вам следует прибегнуть к командной строке.
Пользователи Powershell могут ввести «Install-WindowsFeature Web-Asp-Net45»
Это должно быть эквивалентно использованию диспетчера сервера.
источник
Мне было выдвинуто то же сообщение об ошибке с установленным .net 4.7.
Решение состояло в том, чтобы следовать одному из ранее упомянутых постов, чтобы включить функцию «Включение или отключение Windows», где «.NET Framework 4.7 Advanced Services» -> «ASP.NET 4.7» уже была проверена.
Далее по списку есть «Информационные службы Интернета» и сноска «Функции разработки приложений» -> «ASP.NET 4.7», которые также необходимо проверить.
При включении этого, все другие функции включены ... Я просто нажал кнопку ОК, и проблема была решена. Скриншот диалога окон
источник
Я работаю на Windows Server 2012. Включена функция .NET Extensibility 4.5. WebDAVModule удален. Я все еще получал ошибку 500.21 на маршруте ASP.NET '/ docs'.
Изменение 'skipManagedModules' на false решило проблему.
Благодаря https://groups.google.com/forum/#!topic/bonobo-git-server/GbdMXdDO4tI
источник
Я решил эту проблему, добавив в «Включить или отключить функции Windows» параметр ASP.NET 4.7.
источник
У меня возникла эта проблема, и я обнаружил, что удаление следующей папки помогло, даже с не-Express Edition. Express:
C:\Users\<user>\Documents\IISExpress
источник
Эта ошибка начала происходить со мной из ниоткуда на прошлой неделе, затрагивая существующие веб-сайты на моем компьютере. Мне не повезло с этим, попробовав любое из предложений здесь. В конце концов я полностью удалил WebDAV из IIS (Функции Windows -> Информационные службы Интернета -> Службы всемирной паутины -> Общие функции HTTP -> Публикация в WebDAV). Я сделал сброс IIS после этого для хорошей меры, и моя ошибка была наконец решена.
Я могу только догадываться, что обновление Windows начало проблему, но я не могу быть уверен.
источник
Вы можете исправить это, изменив тип «ExtensionlessUrlHandler-Integrated-4.0» в iis на System.Web.DefaultHttpHandler
источник
Для меня удаление WebDAV с моего сервера заставило приложение возвращать
503 Service Unavailable
сообщение об ошибке при использованииPUT
илиDELETE
, поэтому я переустановил его снова. Я также попытался полностью удалить .NET Framework 4.5 и переустановить его, а также попытался заново зарегистрироваться, как это было предложено, но безрезультатно.Мне удалось это исправить, отключив WebDAV для отдельного пула приложений, это остановило ошибку «плохой модуль» при использовании
PUT
илиDELETE
.Отключить WebDAV для отдельного пула приложений:
WebDAV Authoring Tools
в спискеDisable WebDAV
в правом верхнем углу.Та даааа!
Я все еще оставил элементы удаления в моем
web.config
файле.По этой ссылке я нашел инструкции, но не очень понятно.
источник
Возможно, это не очень полезное решение для OP, но оно касается того же сообщения об ошибке.
Мы размещаем страницы PHP на IIS8.5 с правильно установленной .NET 4.5.
Мы используем функцию предварительной загрузки, чтобы гарантировать, что наше приложение всегда отзывчиво по всем направлениям.
Через некоторое время мы начали получать эту ошибку наугад.
В web.config: я установил skipManagedModules в true, -> не делай этого!
Хотя сайт php, маршрутизация на пейджинг управляется модулями !!!
источник
Я тоже столкнулся с этой проблемой. Мое приложение MVC4 работает на Windows Server 2012 R2 с IIS 8.5. Ни одно из этих опубликованных решений не помогло мне ... установка отсутствующих платформ с помощью функций IIS могла бы решить эту проблему, но установка всегда заканчивалась неудачей.
Я должен был использовать
Web Platform Installer
и установил следующие пакеты:источник
Я столкнулся с этой проблемой в веб-приложении, размещенном на сервере общего хостинга. Таким образом, очевидно, не было прямого доступа к IIS, поэтому не могли применить многие решения, предложенные здесь.
На панели управления хостинг-провайдера я включил ведение журнала ошибок для IIS и ASP.Net. А потом узнал, что ошибка на самом деле лежит в недостающем cshtml.
источник
Установка .NET 4.7 работала для меня. У меня был только 3,5 установлен ранее.
источник