Назад | Перейти на главную страницу

«Серверное приложение недоступно» в IIS7 после перехода на .net 4.0

Недавно мы обновились до .Net 4.0 и написали собственный сценарий развертывания для нашего приложения, который использует Microsoft.Web.Administration библиотека для создания веб-сайтов и настройки пулов приложений. Мы начали тестировать код на ящиках для разработчиков, и, похоже, он работал. Затем мы заметили, что если разработчик пересобирает приложение, оно перестанет работать, и IIS7 выдаст нам это (практически бесполезное) сообщение об ошибке:

Серверное приложение недоступно

Веб-приложение, к которому вы пытаетесь получить доступ на этом веб-сервере, в настоящее время недоступно. Пожалуйста, нажмите кнопку «Обновить» в своем веб-браузере, чтобы повторить запрос.

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

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

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

Это как если бы Microsoft.Web.Administration библиотека отравляет машину, поэтому она больше никогда не будет автоматически перезапускать пулы приложений ?? !!

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

Не уверен, что вы уже проходили через это, но вы не можете смешивать приложения .NET 4 и .NET 2 в одном пуле приложений. Эта проблема укусила нас недавно. Нам пришлось создать новый пул приложений и назначить этому пулу новое веб-приложение .NET 4. Все приложения .NET 2 находятся в другом.

В этот момент все было хорошо, и сообщение, которое вы упомянули, исчезло.

Вы случайно не вызываете Site.Stop ()? Это меняет свойство autoStart сайта на false, вызов Start () вернет его обратно в true.

Чтобы убедиться, что нет других уловок, я бы рекомендовал скопировать файл% windir% \ System32 \ Inetsrv \ Config \ ApplicationHost.config в какой-либо каталог резервных копий, затем запустить приложение развертывания, а затем отличить оба файла после этого и увидеть различия, я предполагаю, что вы увидите, что для некоторых свойств autoStart установлено значение false. Если это так, то это вызвано тем, что вызывается Stop и никогда больше не вызывается Start (до CommitChanges).

Проверьте, есть ли в вашем коде шаблон: Site.Stop () ... вносить изменения в память .... ServerManager.CommitChanges () .... Site.Start ()

Вы никогда не подтвердите последний запуск, который изменил его на autoStart

Я нашел эту ветку, когда искал точно такое же описание ошибки. И я нашел причину этого в моем случае.

Я конвертировал приложение из .net 3.5 в 4.0, и после того, как я изменил пул приложений с 2.0 на 4.0, это началось. Это произошло только в классическом режиме без интеграции.

В моем случае у меня были обработчики http с подстановочными знаками в web.config:

<add name="Wildcard .net 64 bit" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="bitness64"/>    
<add name="Wildcard .net 32 bit" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="bitness32"/>

Но я забыл изменить путь к каталогу .net 4.0

так что после изменения \v2.0.50727\aspnet_isapi.dll к \v4.0.30319\aspnet_isapi.dll сайт стал нормально себя вести.

Надеюсь, это кому-то поможет.