Как я могу отключить приложение?

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

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

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


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

Ответ 1

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

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

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

Ответ 2

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

Например, какое-то исключение, поднятое в другом потоке, должно сделать это:

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

Ответ 3

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

protected override void OnLoad(EventArgs e)
{
  //some other most likely rubbish code
  base.OnInit(e);
}

Ответ 4

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