http://blog.naver.com/plok223/80011580921

ASP.NET 인프라스트럭처(Global.asax,카운터 작성) 

   

요약설명

ASP.NET 인프라스트럭처(Infrastructure)는 웹 애플리케이션을 제어하는 데 있어서 많은 편의성과 효율성을 제공하고 있다.
예를 들어 XML 기반의 machine.config와 web.config파일을 통해 모든 웹 애플리케이션의 전반적이 제어를 가능하게 한다든지, Session과 Application, Cache와 같은 향상된 상태관리 그리고 웹 애플리케이션의 관리 및 사이트 보안과 인증 등에 내용이 포함된다.
 

HOONS
  
  

[ASP.NET 인프라스트럭처(Global.asax)]

 

-. ASP.NET 인프라스트럭처(Infrastructure)는 웹 애플리케이션을 제어하는 데 있어서 많은 편의성과 효율성을 제공하고 있다.   예를 들어 XML 기반의 machine.config와 web.config파일을 통해 모든 웹 애플리케이션의 전반적이 제어를 가능하게 한다든지,   Session과 Application, Cache와 같은 향상된 상태관리 그리고 웹 애플리케이션의 관리 및 사이트 보안과 인증 등에 내용이 포함된다.

 

   웹 애프리케이션의 인스턴스를 총괄하는 Global.asax 파일,

   애프리케인션 레벨에서 발생하는 이벤트의 종류와 핸들링 방법,

   페이지와 애플리케이션이 실행되는 과정을 체계적으로 조사하는 추적(trace) 기능에 대해 알아 보자.

 


   Global.asax

 

  이 파일은 클라이언트가 처음 요청이 일어난 시점에서 HttpApplication  클래스로부터 상속받는 인스턴스가 생성되고 이후의 사용자 요청을 처리하게 된다. 이후에 웹 서버를 종료시키거나 또는 애플리케이션의 코드가 변경된 경우에는 해당 웹 애플리케이션이 중지되고, 이 시점에서 HttpApplication의 인스턴스도 종료되는 방식으로 진행된다.


 

  1) 이벤트

 

    Application 객체의 이벤트

 

    -. Application_OnStart : ASP.NET 애플리케이션이 처음에 시작될 때 발생하는 이벤트

    -. Application_OnEnd    : ASP.NET 애플리케이션이 종료되기 바로 직전에 발생하는 이벤트

    -. Application_OnError : 애플리케이션 내에서 핸들링 되지 않는 에러가 났을때 발생하는 이벤트

    -. Application_OnDisposed : Security 모드에서 사용되는 특정 리소스에 대한 권한을 부여 받기 전에 발생하는 이벤트


    Request에 대해서 발생하는 이벤트

 

    -. Application_BeginRequest : 새로운 Request 요청이 들어올 때마다 발생하는 이벤트

    -. Application_AuthenticateRequest :  Security 모드에서 사용되는 인증여부 판단 이벤트

    -. Application_AuthoriseRequest : Security 모드에서 사용되며 특정 리소스에 대한 권한을 부여받기 전에 발생하는 이벤트

    -. Application_ResolveRequestCache : Cache된 데이터를 복원할 때 발생하는 이벤트

    -. Application_AccquireRequestState : Request 요청시마다 상태를 얻을 때 발생하는 이벤트

    -. Application_PreRequestHandlerExecute : ASP.NET 페이지나 웹 서비스가 실행되기 직전에 발생하는 이벤트

    -. Application_PostRequestState : ASP.NET 페이지나 웹 서비스가 실행되고 난 직후에 발생하는 이벤트

    -. Application_ReleaseRequestState : Application Request의 상태를 저장할 때 발생하는 이벤트

    -. Application_UpdateRequestCache : 모든 처리를 마치고 ASP.NET Cache에 다시 추가될 준비가 되었을때 발생하는 이벤트

    -. Application_EndRequest : Application의 Request가 종료될 때 일어나느 가장 최종적인 이벤트

 

 


    Session 모듈에서 발생하는 이벤트

 

    -. Session_Start : 사용자로부터 요청을 받아서 새로운 세션이 시작될 때 발생하는 이벤트

    -. Session_End : 사용자의 세션이 종료될 때 발생하는 이벤트


    세션(Session)은 웹 애플리케이션에 접속하는 사용자별로 생성되는 객체이다. 웹 환경은 사용자의 요청에 대하여 반응한 후에 네트워크 연결이  끊어지므로 웹 서버의 입장에서는 클라이언트를 구별할 방법이 없으므로 사용자별 고유한 Session ID를 발급해서 접속자를 구분하는데 사용한다.

 

    사용자가 최초에 요청할 때 세션 객체가 생성되며 마지막 요청으로부터 20분이 지나면 세션 객체는 소멸한다.

 


    2) 상태관리

 

ASP.NET에서의 상태관리는 기존의 Application, Session, Cookie 변수를 사용하는 방법 외에도 ViewState나 Cache 등이 추가되어서 보다  효율적으로 관리할 수 있게 되었다.


    -. Application 변수 : HttpApplicationState형의 컬렉션 객체로서 키 값을 사용해서 애플리케이션 범위에서 공통적으로 사용할 수 있는 값을

                         저장한다.

        Application["키값"] = 저장할 변수 값  : Return Type Object

        Application.Contents["키값"] = 저장할 변수 값

        objTemp = Application["키값"]

        objTemp = Application.Contents["키값"]

   

    -. Session 변수 : HttpSessionStates형의 컬렉션 객체로서 사용자별로 변수 값을 저장하는 데 사용한다. 특히, ASP.NET에서는 Session을

                     관리하는데 있어서 기존보다 안정성 측면에서 개선되었고 또한 웹 팜(WebFarm) 환경에서도 사용할 수 있는 방법을 제공하고 있다.


 

 

    view_counter.aspx (카운터 만들기)

 

<form id="Form1" method="post" runat="server">

        <P><FONT face="굴림">카운터 예제</FONT></P>

        <P><FONT face="굴림">

            총접속자 : <asp:Label id="lblTotal" runat="server">Label</asp:Label>명   

            현재접속자 : <asp:Label id="lblNow" runat="server">Label</asp:Label>명

        </FONT></P>

    </form>

 

    private void Page_Load(object sender, System.EventArgs e)

    {

        lblTotal.Text = Application["TotalCount"].ToString();

        lblNow.Text = Application["NowCount"].ToString();

    }

    


    Global.asax

 

// ASP.NET 애플리케이션이 처음에 시작될 때 발생하는 이벤트이다.

    protected void Application_Start(Object sender, EventArgs e)

    {

        Application["TotalCount"] = 0;

        Application["NowCount"] = 0;

    }

 

    protected void Session_Start(Object sender, EventArgs e)

    {

        Application.Lock();

        Application["TotalCount"] = (int)Application["TotalCount"] + 1;

        Application["NowCount"] = (int)Application["NowCount"] + 1;

        Application.UnLock();

    }

     http://blog.naver.com/zzonsang2/140040869086

 

 

 

Global.asax 파일


UI 코드를 직접 작성할 수 있을 뿐만 아니라 응용 프로그램 수준의 논리 및 이벤트 처리 코드를 웹 응용 프로그램에 추가할 수도 있습니다. 이 코드는 생성되는 UI를 처리하지는 않으며, 대개 개별 페이지 요청에 대한 응답으로도 호출되지 않습니다.

 

대신 Application_Start, Application_End, Session_Start 및 Session_End 같은 상위 응용 프로그램 이벤트를 처리합니다. 개발자는 해당 웹 응용 프로그램의 가상 디렉터리 트리의 루트에 있는 Global.asax 파일을 사용하여 이 논리를 작성합니다. ASP.NET은 응용 프로그램 네임스페이스 내의 모든 리소스나 URL이 처음 활성화되거나 요청될 때 HttpApplication 기본 클래스를 확장한 동적 .NET Framework 클래스로 이 파일을 자동으로 구문 분석하고 컴파일합니다.

 

 

Global.asax 파일은 해당 응용 프로그램 네임스페이스 내의 모든 리소스나 URL이 처음 활성화되거나 요청될 때 ASP.NET에 의해 .NET Framework 클래스로 구문 분석되고 동적으로 컴파일됩니다.

 

Global.asax 파일은 외부 사용자가 코드를 다운로드하거나 볼 수 없게 모든 직접 URL 요청을 자동으로 거부하도록 구성되어 있습니다.

 

 

응용 프로그램 또는 세션 범위 이벤트

 

개발자는 Application_EventName(AppropriateEventArgumentSignature)" 명명 패턴에 맞는 메서드를 Global.asax 파일에 작성하여 HttpApplication 기본 클래스의 이벤트에 대한 처리기를 정의할 수 있습니다. 예를 들면 다음과 같습니다.

<script language="C#" runat="server">

void Application_Start(object sender, EventArgs e)

// Application startup code goes here

}

</script>



C#


이벤트 처리 코드로 추가 네임스페이스를 가져와야 할 경우 다음과 같이 .aspx 페이지에 @ import! 지시문을 사용할 수 있습니다.


<%@ Import! Namespace="System.Text" %>


다음 샘플은 Application, Session 및 Request의 수명을 설명합니다.

 
C# Application1.aspx

[샘플 실행] | [소스 보기] 


페이지를 처음 열 때 응용 프로그램과 세션에 대해 Start 이벤트가 발생합니다.


void Application_Start(object sender, EventArgs e)

   // Application startup code goes here

}

void Session_Start(object sender, EventArgs e)

   Response.Write("Session is Starting...<br>");  Session.Timeout = 1;

}

 

C#


각 요청에 대해 BeginRequest 및 EndRequest 이벤트가 발생합니다. 페이지가 새로 고쳐지면 BeginRequest, EndRequest 및 Page_Load 메서드의 메시지만 나타납니다.

 

"End this session" 단추를 클릭하여 현재 세션을 중단시키면 새 세션이 만들어지고 Session_Start 이벤트가 다시 발생합니다.

 

응용 프로그램 또는 세션 범위 개체

 

정적 개체, .NET Framework 클래스 및 COM 구성 요소는 개체 태그를 사용하여 Global.asax 파일에 정의될 수 있습니다. 범위에 사용할 수 있는 값에는 appinstance, session 또는 application이 있습니다.

 

appinstance 범위는 개체가 HttpApplication의 한 인스턴스에 한정되어 사용되고, 공유되지 않음을 나타냅니다.

 

<object id="id" runat="server" class=".NET Framework class Name" scope="appinstance"/>

<object id="id" runat="server" progid="COM ProgID" scope="session"/>

<object id="id" runat="server" classid="COM ClassID" scope="application"/>

 

 

단원 요약


ASP.NET Framework 응용 프로그램은 Global.asax 파일에 응용 프로그램 전체 범위나 세션 전체 범위의 이벤트 처리기를 정의할 수 있습니다.


ASP.NET Framework 응용 프로그램은 Global.asax 파일에 응용 프로그램 전체 범위나 세션 전체 범위의 개체를 정의할 수 있습니다.

 

 


+ Recent posts