사용자가 사이트를 방문 할 때 항상 "친숙한"오류 페이지를 보여주기 위해 Global.asax 페이지에서 catch-all을 사용합니다. 대부분의 오류는 선호되는 것으로 보이는 필터로 처리됩니다 방법. 대부분의 경우이 작동합니다. 그러나 Application_Start 동안 Application_Error 이벤트 (당연히) 트리거되지 않습니다.Global.asax Application_Start에서 어떻게 오류를 처리 할 수 있습니까?
내 Application_Start 이벤트에는 서비스 호출에 종속적 인 초기화 코드가 포함되어 있으므로 쉽게 정의 할 수있는 장애 지점은 서비스가 어떤 이유에서든 사용할 수없는 경우입니다. 이 문제를 해결하기 위해 내가 찾은 유일한 방법은 다음을 수행하는 것입니다.
private static Exception StartUpException;
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
Initialise();
}
private void Initialise()
{
StartUpException = null;
try
{
Bootstrapper.Initialise();
}
catch (Exception ex)
{
StartUpException = ex;
}
}
는 다음 나는 Application_BeginRequest
protected void Application_BeginRequest(object sender, EventArgs e)
{
if (StartUpException != null)
{
HandleErrorAndRedirect(StartUpException);
HttpRuntime.UnloadAppDomain();
Response.End();
}
}
이 작동하지만 해킹의 비트처럼 보인다에서 다음과 같은 코드가 있습니다. UnloadAppDomain 호출의 결과에 대해 확신 할 수 없거나 여러 요청이 도착할 경우 발생할 수있는 상황에 대해 확신 할 수 없습니다. 이것을 관리하는 더 좋은 방법이 있습니까?
'GlobalFilters.Filters'는'HandleError'를 포함합니까? 그렇다면 모든 오류를 포착합니다. – alexn
아니요 제거하지 않았습니다. – DJG
실례지만 내 application_start가 서비스에 의존하는 것은 분명히 [IMHO] 나쁜 행동일까요? 다른 곳으로 옮길 방법이 없습니까? 앱 시작이 약간 무거울 때! 또한 다음 요청이 들어 오면 app_start가 완료 될 때까지 기다렸다가 스레드를 픽업하거나 다른 App_Start를 호출하여 실패 할 것이라고 기대할 것입니다. –