Как избежать прерывания пользователя при развертывании веб-сайта на IIS 6.0 / .NET 3.5 - PullRequest
1 голос
/ 10 августа 2009

Мы разворачиваем наши сайты в виде единого пакета MSI. Мы развертываем на IIS 6.0 (Windows 2003), и они работают на .NET 3.5. Проблема, с которой я столкнулся, заключается в том, что когда мы обновляем новую версию наших сайтов, пользователи могут оказаться на полпути с длительной задачей. Что мне нужно, это следующее:

  1. Как запретить пользователям запускать новые запросы
  2. Позвольте пользователям с длительными задачами завершить свою задачу
  3. Перенаправлять пользователей на целевую страницу во время обновления сайта.

Я надеялся, что IIS предоставит некоторую поддержку этим сценариям, но, думаю, мне не повезет. Это единственный способ добиться этого, добавив на сайт пользовательские функции?

Ответы [ 2 ]

8 голосов
/ 10 августа 2009

Лучший способ выполнить развертывание ASP.NET, которое предотвратит взаимодействие с пользователем, - это создать файл app_offline.htm , см. Сообщение Скотта Гу здесь - http://weblogs.asp.net/scottgu/archive/2005/10/06/426755.aspx

App_offline действительно хорош, поскольку он предотвращает любой трафик в любом месте на вашем сайте. Это то, что они используют на SO, когда делают обновления.

1 голос
/ 09 сентября 2009

Также рассмотрите возможность перехода на сервер состояний сеанса через поставщика сеансов ms sql. Это устраняет потерю состояния сеанса из-за перезапуска любого веб-приложения (обновления bin dll, изменения web.config)

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

Я также читал об использовании оборудования с балансировкой нагрузки для достижения этой цели. Что-то вроде

  1. Перенаправить все существующие сеансы на сервер A
  2. Сервер обновлений B
  3. Перенаправить все новые сеансы на сервер A.
  4. Если на сервере А больше нет сеансов, обновите его.
...