【问题标题】:How to detect that the application start failed?如何检测应用程序启动失败?
【发布时间】:2010-06-21 08:30:41
【问题描述】:

我们的情况:

我们在 loabalancer(Astaro 安全网关)后面有多个网络服务器。在网络服务器上,我们运行一个 asp.net 应用程序,我们为 404 和 500 状态代码配置了自定义错误页面。

现在,当应用程序无法启动时,每个请求都会通过发送状态码 302 重定向到错误页面,然后错误页面本身会发送 500。

负载均衡器每 15 秒向我们的网络服务器发送一个 HEAD 请求,以查看它是否仍然存在,如果存在,它会检查 first html 状态代码。所以它只看到 302。低于 500 的每个代码都被视为服务器已启动并正在运行。

问题:

如果应用程序无法启动,我们如何使负载平衡工作?

编辑:

应用程序启动失败是指在启动过程中出现错误。一些重要部分无法初始化,因此每个页面都无法执行。

【问题讨论】:

  • “应用程序启动失败”是什么意思?你自己阻止它,还是有其他错误?因为即使他有错误,应用程序也会启动,并在找到 app_offline.htm 文件或停止池时停止。

标签: asp.net html application-error application-start


【解决方案1】:

几种方法:

在您的 web.config 中的 customErrors 模式设置 redirectModeResponseRewrite - 这消除了从服务器到错误页面的 302 重定向 - 这也有一个令人高兴的巧合,使用可以轻松查看原始页面的内容他们要求是,如果这可能解决问题,可以使用 F5 重试。

如果您要挂钩 ApplicationError 事件,请确保您使用 Server.Transfer 而不是重定向到错误页面。

我的其中一个 web.config 中有以下内容:

<customErrors mode="On"
              defaultRedirect="ErrorHandler.aspx"
              redirectMode="ResponseRewrite">

然后在我的 ErrorHandler 页面中检查来自服务器的最后一个错误,并配置这些:

  var serverError = Server.GetLastError();

  var error = serverError as HttpException;

  int errorCode;
  string errorMessage;

  if (null != error)
  {
    errorCode = error.GetHttpCode();

    errorMessage = error.GetHtmlErrorMessage();
  }
  else
  {
    errorCode = 404;
    errorMessage = "Page not found";
  }

  Response.StatusCode = errorCode;
  Response.StatusDescription = errorMessage;

显然您可能想要进行额外的处理 - 例如,在我执行所有这些操作之前,我会将原始请求与我的重定向数据库进行比较,以检查移动的内容/虚 url,并且只有在我不能时才回退到这个找到合适的重定向。

【讨论】:

  • @Thomas Schreiner - 没有问题,很高兴为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 2019-04-04
  • 2018-12-24
  • 2012-12-15
  • 2013-11-13
  • 2017-10-07
  • 2013-10-18
  • 1970-01-01
  • 2017-05-12
相关资源
最近更新 更多