티스토리 뷰

자료/ASP.NET

HTTP Handler

네오블루 2010. 2. 2. 11:28

HTTP Handler 는 닷넷 웹 리소스 요청의  마지막 단계로 실제 요청 리소스를 제공하는 것을 담당하는 컴포넌트이며,
IHttpHandler Interface 를 구현하는 클래스의 인스턴스 이다.

이 클래스의 ProcessRequest 가 호출되면서 요청은 처리되어 진다.

예를 들어 닷넷 웹폼의 Page 클래스는 IHttpHandler Interface  를 구현하고 ProcessRequest 가 실행되면서
ViewState 로딩, Init, Load, PreRender 와 같은 이벤트를 발생시킨다.

Http 파이프라인에서 실제 요청 페이지 이전에 거치는 Http Handler Factory  는 요청 처리를 위한  처리기(Handler)의 인스턴스 를 생성 해 준다. 즉, aspx 페이지가 요청이 되면 machine.config 에 등록된 PageHandlerFactory 처리기로 생성되며 이는 요청된 실제 aspx 파일의 소스코드를 해석하고, 페이지를 나타내는 클래스의 컴파일 된 인스턴스를 반환한다

HttpHandler 는 고전적인 ISAPI Extension 에 대응되는 개념이다.

단, 기존의 ISAPI Extension 은 IIS Metabase 에 반드시 등록되어야만 했지만,  HttpHandler 은 구성파일에 등록하고 적절한 위치에 어셈블리가 존재하면 된다

또한 ashx 파일처럼 쉽게 처리기를 구현할 수도 있는데 이것의 장점은 웹폼의 다양한 추상화 과정이 필요 없는 페이지에 적합하다. 즉, ViewState 나 일련의 Page 처리흐름(init -> load) 등이 필요 없는 웹 리소스의 처리 속도 향상을 꽤 할 수 있다

Http 처리기들은 일반적인 웹 페이지 보다 더 빠르며, 상태관리와 포스트백 이벤트들이 필요치 않은 모든 경우에 유용하다

HttpHandler 는 처리 후 다음 요청을 위해 동일 처리기 사용을 목적으로 풀로써 관리될 수도 있다.

HttpHandler 는 동기(IHttpHandler) ,비 동기(IHttpAsyncHandler) 처리를 지원한다

-  Custom HttpHandler 구현 방법 ?
1. 처리기로 사용할 클래스는 IHttpMHandler 를 구현 하도록 한다
2. ProcessRequest 와 IsReusable 을 오버라이딩 한다
3. IsReusable 는 다음 요청 시 이 인스턴스의 재사용 유무를 Boolean 으로 반환한다
4. 구성파일에 HttpHandler 를 등록한다 (machine.config 또는 web.config)
5. IIS 에 등록되어 있지 않은 확장자를 사용할 경우 확장자 매핑을 시켜 준다

출처 : http://www.mkexdev.net/Article/Content.aspx?parentCategoryID=1&categoryID=11&ID=238