不Server.ClearError()防止IIS快速失败保护

不Server.ClearError()防止IIS快速失败保护

问题描述:

在我们的ASP.Net应用程序,我们通常试图通过抓住他们有关的地方给最终用户有用的错误信息来处理我们所有的例外,但有些例外,我们不可能赶上他们被抛出的地方。不Server.ClearError()防止IIS快速失败保护

这是一个问题,我们的服务器设置,因为我们希望保持快速IIS失败保护工作如期进行,被写入到我们的自定义错误日志中的所有错误。所以为了避免意外重置服务器和泛滥我们的错误日志,我在Global.asax.cs中添加了一些代码来抑制某些类型的错误。目前我们正在研究IIS本身抛出的两种HttpExceptions,以防止太长的URL(基于maxUrlLength设置),并防止有错误的WebResource或ScriptResource请求。这些对于我们来说是不可能的,因为一些网络爬虫生成它们。

什么我想知道,这是我很难找到的任何地方的信息是:

  1. 可引用HttpExceptions甚至可能导致快速 失败保护重新启动服务器?我被告知,任何未被捕获的异常都可能导致异常,但对我来说异常的这种异常应该能够引起异常似乎不合逻辑。
  2. 如果我在Application_Error()事件中调用Server.ClearError(),是否足以抑制可能导致快速失败保护重启的错误? 还是现在已经太晚了?由于我们已经在响应未处理的异常的 进程中。

快速失败保护(此处为RFP)功能旨在保护系统免受应用程序池和工作进程的启动不正常或失败的情况。这些问题可能是由您的应用程序或IIS工作进程引起的。官方(虽然旧)的原因列表可以找到here

  1. 不是直接。如果尝试处理错误的逻辑失败,则工作进程可能会崩溃。这将触发RFP。通常,这不会发生,因为IIS将尝试处理Application_Error中的异常。
  2. 如果您的应用程序已优雅地处理了Application_Error中的异常,那么它会在此处停止。你的例外在应用程序级别是“未处理的”,但IIS能够处理它(通常服务于“黄色死亡屏幕”)。因此,工作流程仍然健康,RFP不会被触发。

我看到一个IIS工作进程崩溃在下列条件下:在一个无限循环

  • 递归调用的结果。
  • 系统资源不足以处理请求(达到内存不足或内存限制)。