Native-Code HTTP 모듈 디자인

IIS 7의 HTTP 모듈을 사용하면 개발자가 핵심 IIS 기능을 확장하거나 대체할 수 있습니다. 예를 들어 IIS 7에 포함된 모듈을 대체하는 다이제스트 인증 모듈을 작성할 수 있습니다. 네이티브 코드 모듈에서 제공하는 기능 중 일부는 이전에 ISAPI 필터에서 사용할 수 있었던 기능과 유사할 수 있지만 네이티브 코드 모듈은 다르게 설계되었으며 ISAPI 필터보다 훨씬 풍부한 기능 집합을 제공합니다.

Native-Code HTTP 모듈에 대한 요구 사항

내보낸 등록 함수 추가

RegisterModule 함수를 내보내려면 HTTP 모듈이 필요합니다. 프로젝트에 대한 모듈 정의(.def) 파일을 만들어 이 함수를 내보내거나 /EXPORT:RegisterModule 스위치를 사용하여 모듈을 컴파일할 수 있습니다.

알림 및 모듈 우선 순위 지정

함수를 RegisterModule 만들 때 요청 수준 모듈이 처리할 알림 목록이 포함된 비트 마스크를 지정합니다(자세한 내용은 요청 처리 상수 참조). 예를 들어 요청 수준 모듈은 RQ_BEGIN_REQUEST 알림 및 RQ_MAP_PATH사후 알림을 처리하는 메서드를 제공하도록 지정할 수 있습니다. 마찬가지로 전역 수준 모듈은 GL_APPLICATION_START 및 GL_APPLICATION_STOP알림을 처리하는 메서드를 제공하도록 지정할 수 있습니다.

또한 함수를 RegisterModule 사용하면 모듈의 우선 순위를 지정할 수 있습니다. 사용 가능한 우선 순위는 , , PRIORITY_ALIAS_MEDIUMPRIORITY_ALIAS_HIGH, PRIORITY_ALIAS_LOW및 입니다PRIORITY_ALIAS_LASTPRIORITY_ALIAS_FIRST. 모듈이 등록되면 우선 순위 및 구성 설정 순서대로 처리됩니다. 예를 들어 중간 우선 순위 모듈로 등록하는 HTTP 모듈을 만드는 경우 우선 순위가 높은 모듈이 모두 처리될 때까지 모듈이 처리되지 않습니다. 다른 중간 우선 순위 모듈 전에 처리되도록 모듈을 구성할 수 있으며 우선 순위가 낮은 모듈 전에 모듈이 처리됩니다.

참고

알림의 우선 순위 수준 순서가 반전 RQ_SEND_RESPONSE 됩니다.

Request-Level 모듈 만들기

모듈 팩터리 만들기

네이티브 코드 요청 수준 모듈은 CHttpModule 클래스의 instance 만드는 모듈 팩터리를 제공해야 합니다. 모듈 팩터리는 IHttpModuleFactory 인터페이스에서 상속됩니다.

모듈 팩터리를 만드는 방법에 대한 자세한 내용은 연습: 네이티브 코드를 사용하여 Request-Level HTTP 모듈 만들기의 코드 예제를 참조하세요.

CHttpModule에서 파생된 클래스 만들기

요청 수준 HTTP 모듈에 대한 기본 처리 기능은 기본 CHttpModule 클래스에서 파생된 모듈을 통해 제공됩니다. 이 클래스는 함수에 나열된 각 알림 또는 사후 알림에 대한 콜백 메서드를 RegisterModule 포함해야 합니다. 예를 들어 모듈이 RQ_AUTHENTICATE_REQUEST 알림 및 RQ_AUTHORIZE_REQUEST 사후 알림에 등록된 경우 클래스 에는 OnAuthenticateRequestOnPostAuthorizeRequest 메서드가 포함되어야 합니다.

CHttpModule 메서드에서 반환

클래스의 CHttpModule 메서드가 처리를 마치면 각 메서드는 REQUEST_NOTIFICATION_STATUS 열거형 값을 반환해야 합니다. 이 값은 IIS가 클래스 메서드의 종료 조건을 처리하는 방법을 결정합니다. 예를 들어 RQ_NOTIFICATION_CONTINUE 반환 값은 IIS에 요청을 계속 처리하도록 알릴 수 있습니다. 반면, RQ_NOTIFICATION_FINISH_REQUEST 반환 값은 IIS가 현재 요청에 대한 처리를 중단하도록 지시합니다.

CHttpModule 정리

모듈의 처리가 완료되면 IIS는 모듈의 CHttpModule::D ispose 메서드를 호출하여 메모리에서 클래스를 CHttpModule 제거합니다.

Global-Level 모듈 만들기

CGlobalModule에서 파생된 클래스 만들기

전역 수준 HTTP 모듈에 대한 기본 처리 기능은 기본 CGlobalModule 클래스에서 파생된 모듈을 통해 제공됩니다. 이 클래스는 함수에 나열된 각 알림에 대한 콜백 메서드를 RegisterModule 포함해야 합니다. 예를 들어 모듈이 GL_APPLICATION_STARTGL_APPLICATION_STOP 알림에 등록된 경우 클래스 에는 OnGlobalApplicationStart 및 OnGlobalApplicationStop 메서드 포함되어야 합니다.

CGlobalModule 메서드에서 반환

클래스의 CGlobalModule 메서드가 처리를 마치면 각 메서드는 GLOBAL_NOTIFICATION_STATUS 열거형 값을 반환해야 합니다. 이 값은 IIS가 클래스 메서드의 종료 조건을 처리하는 방법을 결정합니다. 예를 들어 GL_NOTIFICATION_CONTINUE 반환 값은 IIS에 알림을 계속 처리하도록 알릴 수 있습니다. 반면, GL_NOTIFICATION_HANDLED 반환 값은 IIS에 현재 알림에 대한 처리를 중단하도록 지시합니다.

CGlobalModule 정리

모듈의 처리가 완료되면 IIS는 모듈의 CGlobalModule::Terminate 메서드를 호출합니다. 모듈은 이 메서드를 사용하여 메모리에서 클래스를 제거해야 합니다 CGlobalModule .

참고 항목

연습: 네이티브 코드를 사용하여 Request-Level HTTP 모듈 만들기
연습: 네이티브 코드를 사용하여 Global-Level HTTP 모듈 만들기
Native-Code HTTP 모듈 만들기