2012-04-17 25 views
3

如果我写这篇文章的代码哪个Asp.net异常可以做什么?

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进程.... (其他人也会遇到麻烦)...

你能回答我的问题吗?

谢谢。

+0

看看应用程序日志 - 异常的细节应该显示在那里。 – Oded 2012-04-17 13:01:16

+0

@moguzalp号还在非调试模式。但那很好。我在生产中没有真正的例外。我只是想了解哪些例外可以终止什么....(只是测试学习) – 2012-04-17 13:04:51

回答

1

这很可能是着名的StackoverflowException。这是由于您一次又一次地调用方法Page_Load造成的无限循环。

从MSDN:

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

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

你可能想看看这个答案:

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

+0

嗨,蒂姆是啊,我知道,但这只是众多例外之一。我希望我的思想能够用下面的语言编写:'哪个例外(它们的特性)可以用TEMINATE':** 1)AppPool 2)w3wp ** – 2012-04-17 13:11:31

+0

我非常肯定'OutOfMemoryException'会产生同样的效果。 – volpav 2012-04-17 13:20:29

+1

@volpav nope'内存不足以继续执行程序.' w3wp.exe仍然存在。 – 2012-04-17 13:21:43

0

的原因的例外是内存溢出。应用程序如何导致这种情况有很多种方法,没有必要去猜测特定的场景。成像良好的托管服务提供商应受到保护,以免行为不当。

+2

答案很好..但不是这个问题! – 2012-04-17 13:29:39

-3

添加到哪个alrdy可用的答案。你不能拖延整个过程,因为服务器中的每个网站都运行在一个单独的AppDomain中。所以如果你的代码行为不当只有你的appdomain wud被杀害。

+1

你可以请尽量保持txt spch 2 minmum?所以道具盖好了。 – Will 2012-04-17 14:41:55

相关问题