Когда происходит перекомпиляция проекта веб-сайта ASP.NET? - PullRequest
4 голосов
/ 13 апреля 2010

Как указано Maurico и кодека , не используйте стандартные сеансы InProc , если вы не хотите, чтобы ваши сеансы подвергались перекомпиляции веб-сайта и приложение перерабатывает.

Список причин перекомпиляции всего сайта:

  1. По умолчанию, когда на веб-сайте вносятся какие-либо изменения в файл верхнего уровня , весь сайт перекомпилируется. К файлам верхнего уровня относятся global.asax и все файлы в папках bin / и App_Code / .

  2. изменение web.config

  3. изменение конфигурации файла включения, если свойство SectionInformation.RestartOnExternalChanges равно true

    <раздел Name = "MyAppSettings" type = "System.Configuration.AppSettingsSection, System.Configuration, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a" <strong> restartOnExternalChanges = " правда " requirePermission = "false" />

Примечания:

  • Если вы хотите иметь возможность изменять файлы верхнего уровня без необходимости перекомпиляции всего сайта, вы можете установить для optimizeCompilations атрибут элемента compilation в файле Web.config значение true

Ссылки:


Где информация о типах изменений и файлах, вызывающих перекомпиляцию проекта веб-сайта (не проекта веб-приложения)?

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

1 Ответ

6 голосов
/ 13 апреля 2010

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

ASP.NET поставляется со встроенным «сервером состояний», который является просто службой Windows, которая хранит состояние сеанса. Другой вариант - использовать хранилище состояний сеанса SQL Server.

Многие люди скажут вам, что сохранение состояния сеанса в SQL Server - это проблема производительности, но я не согласен: потеря сеансов из-за повторов процессов больше беспокоит, чем производительность SQL Server. Кроме того, сервер состояний ASP.NET работает быстрее, если это то, что вам действительно нужно (и если вы хотите пережить циклы питания, вы даже можете написать собственного провайдера, который хранит состояние в базе данных NoSQL!)

...