如果在Application_Start中抛出未处理的异常会发生什么?

15

对于下一次请求,Application_Start方法是否会被再次运行?

这是取决于ASP.NET版本、托管服务器版本和/或其他上下文吗?

我想确定在此处加载关键程序集是否是好的选择。例如数据访问程序集,它们对整个应用程序的运行至关重要。如果不能加载这样的程序集,则后续请求将无用。


你负责处理错误 - 我会在启动时加载所有关键程序集,但也会在其他关键点再次检查它们,以防它们无法在启动时加载。 - Aristos
1个回答

10

Application_Start只会在每个Web应用程序中触发一次,因此在您的情况下,启动不会再次发生于随后的请求。

通常,我喜欢将一次性启动代码放在应用程序启动中,并使用try-catch来捕获异常。 如果有异常则设置全局错误标志。 在每个BeginRequest中,检查该标志,如果已设置,则将用户重定向到自定义错误页面,指示站点已关闭,请联系管理员。


1
@Alex,这是一个简单的私有静态布尔变量,在global.asax文件中,在application_start方法中设置,以防出现错误。在BeginRequest方法中,会检查该标志以查看是否在应用程序启动期间发生了错误,如果有,则重定向到错误页面。 - VinayC
啊,现在我明白了。原来你是使用了 ASP.NET 的内置标志。谢谢! - Alex
1
如果我在Application_Start中抛出异常,下一个请求会再次触发Application_Start。如果我捕获异常并且不重新抛出,则下一个请求不会触发Application_Start...这是在IIS8 Express上的4.5.2 CLR。 - felickz
我认为未处理的异常导致应用程序域崩溃(你应该能够看到Application_End事件),因此在后续请求中会看到应用程序启动事件。 - VinayC
4
我可以确认两种情况 - 你和Vinay在两个不同的主机上。在IIS6 + CLR4上,App_Start只调用一次。在IIS8 + CLR4.5上,如果出现异常,每次都会调用App_Start。所以我猜测行为是由于IIS或CLR版本的改变而改变的。 - Ishmaeel
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接