【问题标题】:What happens if an unhandled exception is thrown in Application_Start?如果在 Application_Start 中抛出未处理的异常会发生什么?
【发布时间】:2011-08-18 02:46:33
【问题描述】:

... Application_Start 方法是否会为下一个请求再次运行?

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

我正在尝试确定在那里加载关键程序集是否是一件好事。例如,对于整个应用程序的运行是否至关重要的数据访问程序集。未能加载此类程序集将使后续请求无用。

【问题讨论】:

  • 您处理错误 - 我在启动时加载了所有关键程序集,但也在已加载的其他关键点再次检查它们,以防启动时无法加载

标签: asp.net iis exception unhandled-exception application-start


【解决方案1】:

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

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

【讨论】:

  • @Alex,它是 global.asax 中的简单私有静态布尔变量,在出现错误时会在 application_start 中设置。在BeginRequest 中,检查标志以查看应用程序启动期间是否有错误,如果是则重定向到错误页面。
  • 啊,现在我明白了。以为您使用了 ASP.NET 的内置标志。谢谢!
  • 如果我在 Application_Start 中抛出异常,下一个请求会再次命中 Application_Start。如果我捕捉到异常,并且不重新抛出,那么下一个请求不会命中 Application_Start .... 这是 IIS8 Express 上的 4.5.2 CLR
  • 我认为未处理的异常正在关闭应用程序域(您应该能够看到 Application_End 事件),因此您将在后续请求中看到应用程序启动事件。
  • @felickz 我可以确认这两种情况 - 你的和 Vinay 在两个不同的主机上。在 IIS6+CLR4 上,App_Start 仅被调用一次。在 IIS8+CLR4.5 上,如果出现异常,每次都会调用 App_Start。所以我猜测行为会随着 IIS 或 CLR 版本而改变。
猜你喜欢
  • 2020-12-03
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 2023-04-01
  • 2015-08-20
相关资源
最近更新 更多