如何使应用程序池崩溃?

时间:2010-06-15 11:40:59

标签: asp.net application-pool

我们的ASP.NET 2 Web应用程序非常优雅地处理异常。我们在Application_Error中捕获Global ASAX中的异常。从那里我们记录异常,并向用户显示友好消息。

然而,今天早上我们部署了最新版本的网站。它运行了半个小时,但随后App Pool崩溃了。在我们恢复之前的版本之前,该网站没有恢复。

如何让应用程序池崩溃并跳过正常的异常处理程序?我试图复制这个问题,但到目前为止没有运气。


更新:我们找到了解决方案。我们的一个页面是屏幕抓图另一页。但URL配置不正确,页面最终无限制地屏幕抓取本身,从而导致堆栈溢出异常。

4 个答案:

答案 0 :(得分:13)

我看到的最常见错误和“池崩溃”是循环调用。

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

只需拨打sMyText ...

答案 1 :(得分:11)

为了做到这一点,你需要做的就是从请求之外的抛出任何异常(当然不处理它)。

例如,在另一个线程上引发的一些异常应该这样做:

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);
}

可以找到更多信息here in the MS Knowledge Base

答案 2 :(得分:4)

Aristos的回答很好。当有人将覆盖方法从OnInit更改为OnLoad而不更改基本调用时,我也看到它在页面生命周期中使用了一个愚蠢的覆盖,因此它在生命周期中的cirlces中递归:即

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

答案 3 :(得分:1)

您可以尝试投掷ThreadAbortException