ISAPI Filter는 IIS에 탑재되며 해당 웹 서버에 대한 모든 HTTP요청에 대해 무조건 응답하도록 구성되어 있다. 따라서 어떠한 웹 상에서의 행위도 무조건 이 Filter를 거쳐서 지나간다고 할 수 있다.


ISAPI Filter는 Visual C++ 6.0에서 기본 Project로 제공된다. 즉 MFC를 이용한 ISAPI Extension이 기본 제공되는 것이다. 따라서 매우 쉽게 ISAPI Filter를 제작할 수 있다. 그러나 MFC를 사용하는 것은 Performance를 저하시키는 원인이 될 수 있다. 매 요청마다 MFC의 모든 클래스들이 메모리에 로드되어야 하기 때문에 속도 및 메모리 사용율이 나빠질 수 있는 것이다. 그래서 대부분의 프로그래머들은 ISAPI Filter를 작성할 때 WIN32 API를 응용해서 직접 사용한다.


WIN32 API는 MFC에 비해 그럼 복잡한가? 물론이다. 

그러나 내부 코드에서 WIN32 API를 응용해서 사용하는 것은 전~혀 복잡하지 않다!!! 똑같다! 매우 똑같다!



BOOL GetFilterVersion(PHTTP_FILTER_VERSION pVer)

DWORD HttpFilterProc(PHTTP_FILTER_CONTEXT pfc, DWORD dwNotificationType, LPVOID pvNotification)



언제나 HTTP로의 접근이 발생하면 이 두가지 함수가 호출된다. 따라서 이 두가지 함수만 있으면 ISAPI Filter는 끝나는 것이다.


첫번째 함수(GetFilterVersion)는 항상 호출되며 Filter가 실행가능한지 여부를 판단하는 구문이 전부이다. ^^;


WIN32 API와 MFC의 결정적인 차이점은 오직 두번째 함수(HttpFilterProc) 처리를 한 함수 내에서 하는가, 아니면 각각 개별적인 함수로 처리하는가에 있을 뿐이다.


다음 두 번에 걸쳐 WIN32 API와 MFC를 이용한 간단한 Filter 소스를 각각 올려본다.

작동은, 사용자가 웹 서버로 접근할 때 URL에서 특정 문자가 발견되면 다른 URL로 자동 Redirect시키는 기능 한가지만 구현했다. 여기서 사용한 WIN32 API는 DllMain()을 사용하는 순수 WIN32 API가 아니라(상대적으로 복잡하고 손이 많이 가는 관계로) 세부 기능에만 WIN32 API를 적용했다.

'Tech: > C·C++' 카테고리의 다른 글

[펌] Win32 API FAQ  (1) 2008.06.26
VC++2005 배포  (0) 2008.06.26
C++ 동기화 객체(Critical Section, Mutex, Semaphore, Event)  (0) 2008.06.26
ISAPI Filter 예제 2 (MFC + WIN32 API)  (0) 2008.06.26
ISAPI Filter 예제 1 (MFC)  (0) 2008.06.26


Posted by 떼르미
,


자바스크립트를 허용해주세요!
Please Enable JavaScript![ Enable JavaScript ]