Как я разрушаю Пул приложений?

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

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

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


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

15
задан willem 15 June 2010 в 13:41
поделиться

4 ответа

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

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

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

13
ответ дан 1 December 2019 в 02:18
поделиться

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

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

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.

11
ответ дан 1 December 2019 в 02:18
поделиться

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

protected override void OnLoad(EventArgs e)
{
  //some other most likely rubbish code
  base.OnInit(e);
}
4
ответ дан 1 December 2019 в 02:18
поделиться

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

1
ответ дан 1 December 2019 в 02:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: