ISAPI Filter는 예전에 썼던 앞 글에서 Win32 API 및 MFC 버전 두 가지로 작성할 수 있다고 한 적이 있다.


그렇다. 그런데...


언제부턴가 여기에 제한이 붙었다.


현재 나는 Visual Studio 2010을 사용 중인데, 이 환경에서 MFC로 ISAPI Filter를 작성하려고 보니 뭐가 없다는 에러만 줄창 떠서 몹시 당황했다.


그래서 인터넷을 찾아봤더니 Visual Studio 2005까지만 MFC ISAPI Filter를 지원하고 2008부터는 CHttpServer, CHttpFilter 클래스들이 제거되었다. 즉, MFC로 ISAPI Filter를 더 이상 작성할 수 없게 되었다는 얘기다.


함수 사용의 관점에서 말하자면, HttpFilterProc Win32 API 함수를 각각의 알림 형식(NotificationType)에 따라 별도 함수로 쪼개어놓은 CHttpFilter MFC 클래스를 더 이상 사용할 수 없게 되었다는 얘기다.


소스 코드 레벨에서 다시 말하자면,


#include <afxisapi.h>


이 헤더 파일이 더 이상 존재하지 않기 때문에 해당 헤더 파일에 정의되어 있는 CHttpFilter 클래스를 사용할 수 없다는 얘기다.


그러므로, 당연히 Win32 API를 사용해야 되는데 사용할 헤더 파일은


#include <httpfilt.h>

이거다.


그런데, 관련 헤더 및 라이브러리들은 Windows SDK(최신버전) 및 IIS SDK를 설치해야 사용 가능하다는 제약이 있다.

물론, 무료 다운로드 가능하고 한번 설치해놓으면 다른 용도로도 많이 쓸 수 있기 때문에 설치해서 사용하는 것이 좋다.

내 컴퓨터에는 이미 Visual Studio 2010 버전을 설치하는 날 함께 설치해두었기 때문에 바로 쓸 수 있었다.


아무튼,

어쨌거나 별도로 또 뭔가를 설치해야 하는 불편함이 있고,

그와 별개로, 기존에 MFC로 작성된 소스코드를 Win32 API 버전으로 죄다 변경해야 하는 더 큰 불편함이 있다보니

Visual Studio 2008 / 2010 이상의 버전에서도 기존처럼 MFC를 사용할 수 있는 편법이... 당연하게도 생겼다.


그 방법을 정리해서 적어 본다.


1. MFC를 "정적 라이브러리에서 MFC 사용"으로 설정


2. Visual Studio 2005 폴더로부터 다음 파일들을 복사해서 가져오기

afxisapi.h

afxisapi.inl

afxisapi.rc

eafxis.lib

eafxis.pdb

eafxisd.lib

eafxisd.pdb

nafxis.lib

nafxis.pdb

nafxisd.lib

nafxisd.pdb


3. 위 파일들이 있는 경로를 프로젝트 포함 디렉터리(include), 참조 디렉터리(lib)에 추가


이렇게 해놓으면 당연하게도, 기존처럼 MFC를 사용할 수 있다.

(Visual Studio 2005가 설치된 컴퓨터가 주변에 없다면 이 방법 역시 무용지물...)



덧. IIS 7.0에서는 서버 관리자를 통해 별도 IIS 역할로 ISAPI Filter 역할을 추가해준 다음에 ISAPI Filter를 등록할 수 있다.


x64 버전의 IIS에서는 ISAPI Filter 역시 x64로 빌드되어야 정상 동작한다. 간혹 응용 프로그램 풀 설정에서 "32비트 응용 프로그램 사용" 설정을 켜고 쓰면 32비트 dll로 돌아간다는 소리가 인터넷에 보이기도 하는데, 구버전 IIS에서는 됐는지 몰라도 Windows Server 2008 R2 x64의 IIS 7.0에서는 확실히, 안 된다! 주의할 것.




Posted by 떼르미
,


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