ATL Server основан на интерфейсе прикладного программирования Internet-сервера (ISAPI). Архитектура приложения, использующего ATL server.
Чтобы разобраться в ATL Server, очень важно вначале хорошо разобраться в теоретических основах интерфейса прикладного программирования Internet-сервера (ISAPI). Динамически подключаемая библиотека (DLL) интерфейса прикладного программирования Internet-сервера (ISAPI DLL) используется для фильтрации клиентских HTTP-запросов на входе/выходе информационного сервера Internet US (фильтр интерфейса прикладного программирования Internet-сервера (ISAPI)) или для динамической генерации HTML-кода, отправляемого клиенту в ответ на его запрос (расширение интерфейса прикладного программирования Internet-сервера (ISAPI)). И фильтры, и расширения интерфейса прикладного программирования Internet-сервера (ISAPI) используются для того, чтобы изменить или расширить обычное поведение информационного сервера Internet (US).
Фильтры интерфейса прикладного программирования Internet-сервера (ISAPI) прекрасно подходят, в частности, для шифрования данных, мониторинга производительности и настройки системы опознавания. Что касается расширений интерфейса прикладного программирования Internet-сервера (ISAPI), то они прекрасно подходят для динамической генерации HTML-кода и для динамического преобразования в HTML-формат данных, не являющихся HTML-кодом – в частности, записей из базы данных. Например, расширение интерфейса прикладного программирования Internet-сервера (ISAPI) может отправлять запрос в базу данных и затем помещать полученные результаты в подходящим образом отформатированную HTML-страницу.
Архитектура приложения, использующего ATL server
Как и динамически подключаемые библиотеки (DLL) традиционных расширений интерфейса прикладного программирования Internet-сервера (ISAPI), динамически подключаемые библиотеки (DLL) расширений интерфейса прикладного программирования Internet-сервера (ISAPI) на основе библиотеки шаблонных классов ATL экспортируют функции GetExtensionVersion (получить версию расширения), HttpExtensionProc (процедура HTTP-расширения) и TerminateExtension (завершить расширение). Кроме того, следуя традиционной манере, информационный сервер Internet (IIS) создает для каждого HTTP-запроса структуру EXTENSION_CONTROL_BLOCK (управляющий блок расширения). Она в качестве параметра передается в HttpExtensionProc. Эта структура обеспечивает доступ как к информации HTTP-заголовка, так и к потокам данных. Доступ к тому и другому нужен для поддержки связи с HTTP-клиентом.
Главной точкой входа для расширения интерфейса прикладного программирования Internet-сервера (ISAPI) является функция HttpExtensionProc. Она автоматически вызывается информационным сервером Internet (IIS), если нужно обработать 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-приложений, потому что именно в этих библиотеках реализуются обработчики запросов.