[ASP.NET] Global.asax Events

2012. 4. 2. 13:13WEB

Global.asax 파일은 Application, HttpModule에서 사용하는 Events들을 한 장소에서 처리할 수 있도록 지원합니다. Global.asax는 HttpApplication을 상속하기 때문에 HttpApplication에 대한 모든 기능을 사용하실 수 있습니다.

이벤트

Global.asax에서 기본적으로 지원하는 이벤트는 다음과 같습니다.

  • Application_Init: Application이 실행될 때 실행되는 이벤트입니다.
  • Application_Disposed: Application이 소거될 때 발생하는 이벤트입니다. Application에서 사용한 자원을 소거하기에 이상적인 장소이기도 합니다.
  • Application_Error: 처리되지 않은 Exception이 발생했을 때 호출되는 이벤트입니다.
  • Application_Start: HttpApplication의 Instance가 생성될 때마다 실행되는 이벤트입니다. 즉 HttpApplication이 N개면 N번 호출됩니다.
  • Application_End: HttpApplication의 Instance가 소거될 때 실행되는 이벤트입니다.
  • Application_BeginRequest: 사용자의 Request를 수신했을 때 발생하는 이벤트입니다. 이 이벤트는 Request를 수신했을 때 가장 먼저 호출되는 이벤트이기도 합니다.
  • Application_EndRequest: Request 처리 후 가장 마지막에 실행되는 이벤트입니다.
  • Application_PreRequestHandlerExecute: ASP.NET Page Framework가 ASP.NET Page 또는 Web Service 들의 Event를 호출하기 전에 실행되는 이벤트입니다.
  • Application_PostRequestHandlerExecute: ASP.NET Page Framework가 ASP.NET Page 또는 Web Service 들의 Event를 마쳤을 때 실행되는 이벤트입니다.
  • Applcation_PreSendRequestHeaders: ASP.NET Page Framework가 Http Header를 Client로 전송하기 전에 실행되는 Event입니다.
  • Application_PreSendContent: ASP.NET Page Framework가 Http Contents를 Client로 전송하기 전에 실행되는 Event입니다.
  • Application_AcquireRequestState: ASP.NET Page Framework가 현재 요청과 관련하여 Current State(Session State)를 얻게 되었을 때 호출되는 이벤트입니다.
  • Application_ReleaseRequestState: ASP.NET Page Framework가 관계된 모든 Events를 실행하고 난 뒤 호출되는 이벤트입니다. 이 이벤트로 인해 모든 State Modules가 Current State Data를 저장하게 됩니다.
  • Application_ResolveRequestCache: Fired when the ASP.NET page framework completes an authorization request. It allows caching modules to serve the request from the cache, thus bypassing handler execution.
  • Application_UpdateRequestCache: Fired when the ASP.NET page framework completes handler execution to allow caching modules to store responses to be used to handle subsequent requests.
  • Application_AuthenticateRequest: Fired when the security module has established the current user's identity as valid. At this point, the user's credentials have been validated.
  • Application_AuthorizeRequest: Fired when the security module has verified that a user can access resources.
  • Session_Start: Fired when a new user visits the application Web site.
  • Session_End: Fired when a user's session times out, ends, or they leave the application Web site.

이벤트 실행 순서

각 이벤트의 실행 순서는 다음과 같습니다.

  1. Application_BeginRequest
  2. Application_AuthenticateRequest
  3. Application_AuthorizeRequest
  4. Application_ResolveRequestCache
  5. Application_AcquireRequestState
  6. Application_PreRequestHandlerExecute
  7. Application_PreSendRequestHeaders
  8. Application_PreSendRequestContent
  9. <<code is executed>>
  10. Application_PostRequestHandlerExecute
  11. Application_ReleaseRequestState
  12. Application_UpdateRequestCache
  13. Application_EndRequest

Application_Init, Application_Start가 Application이 시작할 때 한 번씩 실행되며, Application_Dispose, Application_End는 Application이 종료될 때 한번 씩 실행됩니다. Session_Start, Session_End는 각각 Session이 시작될 때와 종료될 때 실행됩니다.

기타 이벤트

Global.asax는 Application의 Events 뿐만 아니라 HTTPModule들의 Events도 정의하실 수 있습니다.

  • Profile_OnMigrateAnonymous: Anonymous User를 사용하다가 Login 등 사용자 인증을 진행했을 때 발생하는 이벤트
    public void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs args)
    {
        //Anonymous User에 대한 Identifier를 삭제합니다. Cookie에서 Anonymous에 대한 정보가 삭제됩니다.
        AnonymousIdentificationModule.ClearAnonymousIdentifier();
    }
  • AnonymousIdentification_Creating: Anonymous User가 생성되는 시점에 발생하는 이벤트. 즉 Anonymous User의 Guid가 생성되는 시점에 실행됩니다. 하지만 이 때 Anonymous User를 위한 aspnet_Users가 DB에 생성되는 것은 아니니 참고바랍니다.
    public void AnonymousIdentification_Creating(object sender, AnonymousIdentificationEventArgs args)
    {
        //Anonymous User의 GUID를 강제할 당 해줄 수 있습니다.
        args.AnonymousID = "4fe6bc00-03fc-42b3-a194-778f2baf6883";
    }