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 (카운터 만들기)
<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
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 기본 클래스의 이벤트에 대한 처리기를 정의할 수 있습니다. 예를 들면 다음과 같습니다.
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 파일에 응용 프로그램 전체 범위나 세션 전체 범위의 개체를 정의할 수 있습니다.
[출처] Global.asax,카운터 작성 (WhatVoIP) |작성자 뚜림
'Programming > ASP.NET' 카테고리의 다른 글
[스크랩] 이미지배경 투명처리 (0) | 2010.05.12 |
---|---|
ASP.NET JavaScript 에서 C# 함수호출하기 - PageMethod (0) | 2010.05.11 |
[스크랩] 페이지 수명주기 단계 (0) | 2010.05.04 |
[스크랩] ASP.NET 보안. (0) | 2010.05.04 |
[스크랩] ASP.NET에서 전역 변수를 사용 현재 접속자 리스트 구현 (0) | 2010.05.03 |
[스크랩] RegisterForEventValidation은 Render()를 실행하는 동안에만 호출 (0) | 2010.04.27 |
팝업창 열기 (0) | 2010.04.27 |
GridView 숨겨진 필드 값 가져오기 (0) | 2010.04.21 |
페이지 이동시 주소 표시줄 고정시키기 (0) | 2010.04.15 |
JQuery를 사용한 MouseOver 시 Div 창 띄워주기. ^O^ (0) | 2010.04.13 |