Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

Самым чистым маршрутом будет разгружать свой сеанс на сервер сеанса или минимизировать использование сеанса.

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

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

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

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

В зависимости от того, что вы храните в объекте сеанса, вы можете восстановить его в Global.Asax's Session_start Handler. Раньше я делал это во внутреннем приложении, в котором мы действительно сохранили только удостоверение личности пользователя на сеансе, поэтому мы могли бы просто использовать их разрешение Cookie для воссоздания сеанса.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top