Как и динамически подключаемые библиотеки (DLL) традиционных расширений интерфейса прикладного программирования Internet-сервера (ISAPI), динамически подключаемые библиотеки (DLL) расширений интерфейса прикладного программирования Internet-сервера (ISAPI) на основе библиотеки шаблонных классов ATL экспортируют функции GetExtensionVersion (получить версию расширения), HttpExtension-Proc (процедура HTTP-расширения) и TerminateExtension (завершить расширение). Кроме того, следуя традиционной манере, информационный сервер Internet (IIS) создает для каждого HTTP-запроса структуру EXTENSION_CONTROL_BLOCK (управляющий блок расширения). Она в качестве параметра передается в HttpExtensionProc. Эта структура обеспечивает доступ как к информации HTTP-заголовка, так и к потокам данных. Доступ к тому и другому нужен для поддержки связи с HTTP-клиентом.
Главной точкой входа для расширения интерфейса прикладного программирования
Internet-сервера (ISAPI) является функция HttpExtensionProc. Она автоматически
вызывается информационным сервером Internet (П5), если нужно обработать HTTP-запрос,
который предназначен для расширения интерфейса прикладного программирования
Internet-сервера (ISAPI) (ISAPI Extension). Для чтения клиентских данных и соответствующего
реагирования HttpExtensionProc использует функции обратного вызова, предоставляемые
параметром EXTENSION_CONTROL_BLOCK. На рис. 12.1 показана общая схема использования
интерфейса прикладного программирования Internet-сервера (ISAPI) в Web-приложении,
основанном на ATL Server.
Рис. 12.1. Архитектура приложения, основанного на ATL Server
На рис. 12.1 показана только одна динамически подключаемая библиотека (DLL) расширения интерфейса прикладного программирования Internet-сервера (ISAPI). Это сделано потому, что в каждом виртуальном каталоге-информационного сервера Internet (IIS) может быть только одна такая библиотека. Еще ла рисунке видно, что в виртуальном каталоге может быть несколько динамически подключаемых библиотек (DLL) Web-приложения и несколько . srf-файлов. И хотя код в динамически подключаемой библиотеке (DLL) расширения интерфейса прикладного программирования Internet-сервера (ISAPI) можно настраивать, все же это обычно делается в динамически подключаемых библиотеках (DLL) Web-приложений, потому что именно в этих библиотеках реализуются обработчики запросов.