Непрерывное Развертывание с веб-сайтом ASP.NET?

У меня есть веб-сайт в C#/ASP.NET, который в настоящее время находится в разработке. Когда мы работаем, я хотел бы сделать выпуски часто в течение дня, поскольку мы исправляем ошибки и добавляем опции (как это: http://toni.org/2010/05/19/in-praise-of-continuous-deployment-the-wordpress-com-story/).

Если Вы загружаете новую версию сайта или даже изменяете единственный файл, он выгоняет пользователей, которые в настоящее время зарегистрированы, и заставляет их запуститься по любым формам и такому. Существует ли секрет к способности сделать развертывание, не вмешиваясь в пользователей для сайтов.NET?

14
задан Venemo 19 May 2010 в 20:00
поделиться

5 ответов

Если вы вносите изменения в файл конфигурации, содержимое папки bin приложения или что-то подобное, рабочий процесс ASP.NET перезапускается вместе с вашим приложением.

Это приводит к удалению сеансов и исключению пользователей.

Решение состоит в том, чтобы использовать другие методы хранения сеанса, отличные от стандартного InProc .
Этого можно добиться, установив режим состояния сеанса . Параметры SqlServer и StateServer обеспечивают очень хорошее решение вашей проблемы.

Режим SqlServer относительно легко настроить, запустить и запустить. (По сути, это просто создание базы данных, запуск aspnet_regsql, а затем указание ее в конфигурации.) Если у вас нет MS SQL Server или вы не хотите его использовать, вы можете использовать StateServer , или создайте собственного провайдера и используйте режим Пользовательский .

Единственное ограничение заключается в том, что вы можете сохранять только сериализуемые значения в режиме SqlServer и StateServer .

5
ответ дан 1 December 2019 в 15:11
поделиться

Для этого есть две альтернативы:

  1. Не использовать сеанс вообще. (Вы можете использовать куки для аутентификации)
  2. Используйте другой режим состояния сеанса. Государственный сервер или SQLServer. http://msdn.microsoft.com/en-us/library/ms178586 (v = VS.80) .aspx

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

0
ответ дан 1 December 2019 в 15:11
поделиться

В зависимости от того, что вы храните в объекте Session, вы можете восстановить его в обработчике Global.asax's Session_Start. Я делал это во внутреннем приложении, где мы хранили в Session только идентификационные данные пользователя, поэтому мы могли просто использовать его cookie авторизации для воссоздания сессии.

Одна вещь, которую следует иметь в виду, если вы это сделаете: допустим, пользователь загружает форму, а затем уходит на обед, и вы обновляете страницу, пока его нет. Если они вернутся к своему столу и отправят форму, они отправят старую версию формы в новый code-behind.

0
ответ дан 1 December 2019 в 15:11
поделиться

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

0
ответ дан 1 December 2019 в 15:11
поделиться

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

Самый простой способ - разгрузить сеанс на сервере состояния сеанса или свести к минимуму использование сеанса.

Один из способов обойти это - если вы не можете разгрузить сеанс, - всегда выполнять развертывание в новом виртуальном каталоге. Затем ваш общедоступный URL-адрес просто перенаправляет на вашу последнюю версию. Все пользователи, которые уже вошли в систему, продолжат использовать старую версию, но любые новые пользователи будут использовать новую версию.

5
ответ дан 1 December 2019 в 15:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: