Повторно включите сеанс ASP.NET, вызвавший зависание IIS - PullRequest
0 голосов
/ 30 декабря 2010

Я пытаюсь внедрить некоторые функции защиты от сбоев на веб-сервере клиента, на котором запущены два наиболее важных сайта (ASP.NET на IIS7). Я собираюсь настроить ограничение пула приложений, чтобы, если какой-либо процесс w3wp использует 90% + ЦП в течение более минуты, он будет убит (создавая временное сообщение 503 Service Unavailable для всех посетителей), и на основе моего локального тестирования будет быть перезапущенным в течение минуты - гораздо лучшее решение, чем один процесс с перегрузкой ЦП, который отключает весь сервер на любой промежуток времени.

Кажется, это работает, но во время моих действий на моем локальном экземпляре IIS7 я заметил, что если запрос вызывает мой Kill.aspx, даже когда сайт возвращается, IIS не будет обслуживать сеанс, вызвавший его похмелья. Я могу перезапустить тестовый сайт только из другого сеанса, но как только я очищаю свои куки в браузере «убийцы», я снова могу попасть на сайт.

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

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

Ответы [ 2 ]

1 голос
/ 30 декабря 2010

Yous должен использовать ASP.Net Session StateServer вместо In-Proc (подробнее см. msdn ).Таким образом, ваша сессия будет выполняться в другом процессе и не будет зависеть от сбоя IIS.

0 голосов
/ 30 декабря 2010

Отключить какую «функцию»? Если рабочий процесс сбрасывается (и вы используете внутрипроцессный сеанс), то сеанс сдувается при сбросе.

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

Кроме того, вы можете настроить пул приложений на использование нескольких рабочих процессов (иначе: веб-сад) таким образом, если один процесс убит, другие продолжают обслуживать контент.

Далее, в качестве другого варианта вы можете настроить несколько веб-серверов и распределить их нагрузку.

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

...