ASP.net C # требует перезагрузки IIS, когда новая DLL скопирована в каталог BIN - PullRequest
7 голосов
/ 01 июня 2011

Мы получаем проблему, из-за которой каждый раз, когда мы копируем dll в каталог bin, наш основной домен на сайте останавливается, и единственный способ восстановить его - перезапустить "WWW Publishing Service".

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

У нас есть большая кодовая база, которая содержит более 280 страниц ASPX по всему сайту. Наш основной домен содержит около 100 страниц ASPX, в то время как поддоменов по 15 или 20 каждый.

Когда мы делаем сборку, мы в настоящее время генерируем кучу DLL, которые мы вручную копируем в каталог bin производственных серверов. Как только мы делаем это, IIS, очевидно, запускает цикл, компилирующий каждую из страниц aspx и кодовый фрагмент. На этом этапе сайт практически останавливается (иногда его необходимо перезапустить - перезапустив службу веб-публикации - чтобы снова его разбудить).

Любопытно, что это происходит только тогда, когда мы развертываем приложение IIS основного домена, то есть www. Если мы развернем bin-файл в поддомене таким же образом, он почти мгновенно сработает.

Даже если я запускаю iisreset.exe, проблема, похоже, не решается.

Несколько вопросов:

  1. Есть ли способ ускорить текущий процесс, чтобы нам не приходилось перезагружать сервер?
  2. Будут ли какие-либо очевидные изменения или обновления кода, которые будут вызывать необходимость перезапуска службы (иногда мы запускаем iisreset, но, похоже, это не возвращает его к жизни)?

Некоторые характеристики:

  • Код написан на: C #
  • .net framework: 2.0
  • Сервер: Windows Web Server 2008
  • iis версия: IIS7
  • База данных: MSSQL 2008 Standard

Любая помощь будет принята с благодарностью. Заранее спасибо.

Ответы [ 3 ]

12 голосов
/ 01 июня 2011

Когда вы помещаете файл app_offline.htm в wwwroot вашего основного домена, сайт IIS отключается. Это поведение IIS по умолчанию, как описал Скотт Гу. Когда вы делаете это, все dll могут быть безопасно перезаписаны. А когда вы удалите файл app_offline.htm, ваше приложение будет запущено при следующем поступлении запроса.

Подробнее о app_offline.htm здесь и здесь .

Обычно, если вы поместите файл с этим именем в корень каталога веб-приложения, ASP.NET 2.0 закроет приложение, выгрузит домен приложения с сервера и прекратит обработку любых новых входящих запросов для этого приложение. Затем ASP.NET также ответит на все запросы динамических страниц в приложении, отправив обратно содержимое файла app_offline.htm (например, вы можете захотеть получить сообщение «сайт находится в разработке» или «не работает») .

Это обеспечивает удобный способ закрыть ваше приложение, когда вы вносите большие изменения или копируете множество новых функциональных возможностей страницы (и вы хотите избежать назойливой проблемы людей, попадающих и активирующих ваш сайт в середине обновления контента). ). Это также может быть полезным способом немедленной разблокировки и выгрузки базы данных SQL Express или Access, чьи файлы данных .mdf или .mdb находятся в каталоге / app_data.

Как только вы удалите файл app_offline.htm, следующий запрос в приложение приведет к тому, что ASP.NET снова загрузит приложение и домен приложения, и жизнь продолжится как обычно.

3 голосов
/ 01 июня 2011

Насколько я знаю, нет необходимости делать iisreset при добавлении dll в папку bin.DLL должна быть загружена автоматически из корзины.

Вы должны сделать iisreset, когда добавляете новую DLL в глобальный кеш сборок.

0 голосов
/ 01 июня 2011

Можете ли вы остановить этот сайт в IIS, пока вы копируете dll, а затем запустить его снова?Потому что это не остановит другие веб-сайты, размещенные в том же IIS.

...