哪些Asp.net例外可以做什么?

时间:2012-04-17 12:58:53

标签: asp.net iis-7 .net-4.0 exception-handling w3wp

如果我写这段代码

  protected void Page_Load(object sender, EventArgs e)
    {
        Page_Load(sender, e);
    }

我得到一个错误(无休止的递归):

enter image description here

w3wp.exe进程从task manager终止。

精细...

但是,如果我这样做:

throw new ApplicationException(); //or SystemException();

它只出现在常规异常页面中。 (w3wp.exe仍在运行。)

问题:

  • 导致 w3wp.exe 关闭的异常是什么?
  • 导致应用程序池关闭的异常类型是什么?

P.S。 根据我刚刚写的内容,请考虑以下情况: 我可以写一个网页,在一个网站的农场托管我的网站,我可以通过创建递归终止整个w3wp.exe进程.....(还有其他人会有麻烦)......

你能回答我的问题吗?

感谢。

3 个答案:

答案 0 :(得分:1)

这很有可能是着名的StackoverflowException。它是由无限循环引起的,因为你一次又一次地调用方法Page_Load

来自MSDN:

  

在.NET Framework的早期版本中,您的应用程序可能会捕获   StackOverflowException对象(例如,要从中恢复)   无限递归)。但是,目前不鼓励这种做法   因为需要大量额外的代码来可靠地捕获a   堆栈溢出异常并继续执行程序。

     

从.NET Framework 2.0版开始,发生StackOverflowException   对象不能被try-catch块和相应的块捕获   进程默认终止。因此,建议用户   编写代码来检测并防止堆栈溢出。例如,   如果您的应用程序依赖于递归,请使用计数器或状态   条件终止递归循环。请注意一个应用程序   托管公共语言运行库(CLR)可以指定CLR   卸载堆栈溢出异常的应用程序域   发生并让相应的过程继续。更多   信息,请参阅ICLRPolicyManager界面和托管概述。

您可能想看一下这个答案:

https://stackoverflow.com/a/4802309/284240

答案 1 :(得分:0)

异常的原因是内存溢出。应用程序可以通过多种方式实现此目的,没有必要猜测具体方案。我应该保护良好的托管服务提供商免受行为不端的应用程序的影响。

答案 2 :(得分:-3)

添加可用的答案。因为服务器中的每个网站都在一个单独的AppDomain中运行,所以你无法完成整个过程。所以,如果你的代码行为不端只会被你的appdomain wud杀死。