Как вывести из строя пул приложений? - PullRequest
15 голосов
/ 15 июня 2010

Наше веб-приложение ASP.NET 2 обрабатывает исключения очень элегантно.Мы отлавливаем исключения в Global ASAX в Application_Error.Оттуда мы регистрируем исключение и показываем дружественное сообщение пользователю.

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

Как сделать так, чтобы пул приложений аварийно завершал работу и пропускал обычный обработчик исключений?Я пытаюсь повторить эту проблему, но пока безуспешно.


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

Ответы [ 4 ]

13 голосов
/ 15 июня 2010

Самая распространенная ошибка, которую я вижу и "сбой пула" - это вызов цикла.

public string sMyText
{
   get {return sMyText;}
   set {sMyText = value;}
} 

Просто вызовите sMyText ...

11 голосов
/ 15 июня 2010

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

protected void Page_Load(object sender, EventArgs e)
{
   // Create a thread to throw an exception
   var thread = new Thread(() => { throw new ArgumentException(); });

   // Start the thread to throw the exception
   thread.Start();

   // Wait a short while to give the thread time to start and throw
   Thread.Sleep(50);
}

Более подробную информацию можно найти здесь, в базе знаний MS

4 голосов
/ 15 июня 2010

Аристос ответил хорошо.Я также видел, как это было сделано с глупым переопределением в жизненном цикле страницы, когда кто-то меняет переопределенный метод с OnInit на OnLoad, не меняя базовый вызов, чтобы он повторялся циклически в течение всего жизненного цикла: т.е.

1 голос
/ 15 июня 2010

Вы можете попробовать бросить ThreadAbortException.

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