Ответ 1
Наиболее распространенная ошибка, которую я видел, и "сбой в пуле" - это вызов цикла.
public string sMyText
{
get {return sMyText;}
set {sMyText = value;}
}
Просто вызовите sMyText...
Наше веб-приложение ASP.NET 2 обрабатывает исключения очень элегантно. Мы исключаем исключения из Global ASAX в Application_Error. Оттуда мы регистрируем исключение, и мы показываем дружеское сообщение пользователю.
Однако сегодня утром мы развернули последнюю версию нашего сайта. Он прошел нормально на полчаса, но затем в App Pool разбился. Сайт не вернулся, пока мы не восстановили предыдущий выпуск.
Как я могу сделать сбой пула приложений и пропустить нормальный обработчик исключений? Я пытаюсь воспроизвести эту проблему, но пока не повезло.
Обновление: мы нашли решение. Одной из наших страниц было экранирование другой страницы. Но URL-адрес был настроен некорректно, и страница закончила скрипинг без ограничений, что вызвало исключение.
Наиболее распространенная ошибка, которую я видел, и "сбой в пуле" - это вызов цикла.
public string sMyText
{
get {return sMyText;}
set {sMyText = value;}
}
Просто вызовите sMyText...
Чтобы сделать это, все, что вам нужно сделать, это выбросить любое исключение (без его обработки, конечно) извне контекста запроса.
Например, какое-то исключение, поднятое в другом потоке, должно сделать это:
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
Ответ Аристоса хорош. Я также видел, как это делалось с глупым переопределением в жизненном цикле страницы, когда кто-то менял метод override с OnInit на OnLoad, не меняя базовый вызов, поэтому он возвращался в циклы в течение жизненного цикла: i.e.
protected override void OnLoad(EventArgs e)
{
//some other most likely rubbish code
base.OnInit(e);
}
Вы можете попробовать бросить ThreadAbortException
.