2010-06-21 3 views
1

우리의 상황 :응용 프로그램 시작이 실패했음을 감지하는 방법은 무엇입니까?

우리는 loabalancer (Astaro 보안 게이트웨이) 뒤에 여러 웹 서버가 있습니다. 웹 서버에서 asp.net 애플리케이션을 실행하면 404 및 500 상태 코드로 구성된 customerrorpages가 있습니다. 응용 프로그램은 상태 코드 (302)과의 errorpage 후 자체 보내의 errorpage로 재 모든 요청을 시작하는 데 실패하기

은로드 밸런서가 우리의 웹 서버를 참조하는 15 초 간격으로 HEAD 요청을 보내는 500

보낸다 그래도 살아 있다면, 첫 번째 html 상태 코드를 확인합니다. 그래서 그것은 단지 302를 볼 수 있습니다. 500 이하의 모든 코드는 서버가 가동되어 실행되는 것으로 처리됩니다.

질문 :

우리가 어떻게 응용 프로그램이 시작하는 데 실패하면 우리의 평형화의 작업을 할 수 있습니까?

편집 : 응용 프로그램으로

내가 시작하는 동안 오류가 있다고 의미를 시작하지 못했습니다. 일부 필수 부분은 초기화 할 수 없으므로 모든 페이지가 실행되지 않습니다.

+0

"응용 프로그램 시작 실패"는 무엇을 의미합니까? 당신은 자기 자신에 의해 그것을 멈추거나 다른 오류가 있습니까? 응용 프로그램이 오류가 있어도 시작되기 때문에 app_offline.htm 파일을 찾거나 중지 할 때 중지됩니다. – Aristos

답변

1

몇 가지 방법 다음 customErrors에 모드에 대한 당신의 Web.config에서

설정 redirectModeResponseRewrite에 - 이것은 302 에러 페이지에 대한 서버에서 리디렉션 제거 -이 또한 캔을 사용하는 행복 우연의 일치가 있습니다 요청한 원래 페이지가 무엇인지 쉽게 확인하고 문제를 해결할 가능성이있는 경우 F5 키를 사용하여 다시 시도 할 수 있습니다.

ApplicationError 이벤트에 연결하는 경우 오류 페이지로 리디렉션하지 말고 Server.Transfer을 대신 사용해야합니다.

나는 내 web.configs 중 하나에 다음이 : 나는 서버에서 마지막 오류를 확인 내 ErrorHandler를 페이지에서 다음

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

, 그를 구성 : 분명히

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을 확인하고 적합한 리디렉션을 찾을 수없는 경우에만이 작업으로 넘어갈 수 있습니다 .

+0

감사합니다. 문제가 해결됩니다. – Thomas

+0

@ 토마스 슈 라이너 - 도움이 될만한 probs이 없습니다. –

관련 문제