2010-06-21 21 views
1

我们的处境:如何检测应用程序启动失败?

我们有一个loabalancer(Astaro的安全网关)后面的几个Web服务器。在web服务器上,我们运行一个asp.net应用程序,并为404和500状态代码配置了客户错误页面。

现在,当应用程序无法启动,每一个请求是通过发送状态代码302和自身的errorPage然后重定向到的errorPage发送500

负载平衡器发送HEAD请求到我们的每15秒看Web服务器如果还活着,如果是,则检查第一 HTML状态代码。所以它只能看到302.低于500的每个代码都被视为服务器已启动并正在运行。

问:

我们怎样才能使如果应用程序未能启动,我们的负载平衡的工作?

编辑:

通过程序启动失败,我的意思是,在启动过程中出现了错误。一些重要部分不能初始化,因此每个页面都无法执行。

+0

你是什么意思“应用程序启动失败”?你是靠自己来阻止它,还是有其他的错误?因为即使他有错误,应用程序也会启动,并在找到app_offline.htm文件时停止,或停止池。 – Aristos 2010-06-21 13:51:48

回答

1

几种方法:

在上的customErrors模式你的web.config设置redirectModeResponseRewrite - 这消除了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; 

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

+0

谢谢,这确实解决了我们的问题。 – Thomas 2010-06-23 07:57:04

+0

@Thomas Schreiner - 没有probs,很高兴提供帮助。 – 2010-06-23 08:13:35

相关问题