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