如何崩溃应用程序池?
我们的ASP.NET 2 Web应用程序非常优雅地处理exception。 我们在Application_Error中的Global ASAX中捕获exception。 从那里我们loggingexception,我们向用户显示一个友好的信息。
不过,今天早上我们部署了我们网站的最新版本。 它运行了半个小时,但是App Pool崩溃了。 在我们恢复之前的版本之前,网站没有恢复。
我如何使应用程序池崩溃,并跳过正常的exception处理程序? 我试图复制这个问题,但目前还没有运气。
更新 :我们find了解决scheme。 我们的其中一页是屏幕上的另一个页面。 但是URLconfiguration不正确,页面无限地屏蔽了自己 ,从而导致了堆栈溢出exception。
我看到的最常见的错误和“池崩溃”是循环调用。
public string sMyText { get {return sMyText;} set {sMyText = value;} }
只需调用sMyText …
为了做到这一点,你所需要做的就是从请求的上下文之外抛出任何exception(当然不用处理)。
例如,在另一个线程上引发的一些exception应该这样做:
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); }
更多信息可以在这里find在MS知识库
Aristos的答案很好。 我也在页面生命周期中看到了它的一个愚蠢的重写,当有人改变从OnInit的重写方法到OnLoad而不改变基本的调用,所以它在整个生命周期循环遍历:ie
protected override void OnLoad(EventArgs e) { //some other most likely rubbish code base.OnInit(e); }
你可以尝试抛出一个ThreadAbortException
。