我们的ASP.NET 2 Web应用程序非常优雅地处理异常。我们在Application_Error中捕获Global ASAX中的异常。从那里我们记录异常,并向用户显示友好消息。
然而,今天早上我们部署了最新版本的网站。它运行了半个小时,但随后App Pool崩溃了。在我们恢复之前的版本之前,该网站没有恢复。
如何让应用程序池崩溃并跳过正常的异常处理程序?我试图复制这个问题,但到目前为止没有运气。
更新:我们找到了解决方案。我们的一个页面是屏幕抓图另一页。但URL配置不正确,页面最终无限制地屏幕抓取本身,从而导致堆栈溢出异常。
答案 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
。