如何检测应用程序启动失败?

时间:2010-06-21 08:30:41

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

我们的情况:

我们在loabalancer(Astaro Security Gateway)背后有几个网络服务器。在网络服务器上,我们运行一个asp.net应用程序,我们为404和500状态代码配置了客户脚本。

现在,当应用程序无法启动时,每个请求都会通过发送状态代码302重定向到errorpage,并且errorpage本身会发送500.

loadbalancer每隔15秒向我们的网络服务器发送一个HEAD请求,看看它是否还活着,如果是,它会检查第一个 html状态代码。因此它只能看到302. 500以下的每个代码都被视为服务器启动并运行。

问题:

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

修改

应用程序无法启动我的意思是在启动期间出现了错误。一些基本部分无法初始化,因此每个页面都无法执行。

1 个答案:

答案 0 :(得分:1)

有两种方式:

在customErrors模式的web.config中,将redirectMode设置为ResponseRewrite - 这会将302重定向从服务器移除到错误页面 - 这也很有用,可以很容易地看到他们要求的原始页面是什么,如果可能解决问题,可以使用F5重试。

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

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

<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;

显然你可能想要进行额外的处理 - 例如在我做这一切之前,我将原始请求与我的重定向数据库进行比较,以检查移动的内容/虚荣网址,如果我不能,则只回到此处找到合适的重定向。