2010-06-21 86 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

相關問題