Создание и запуск проекта на основе ATL Server
Таблица 12.1. Структура EXTENSION_CONTROL_BLOCK для ATLServerApp.srf.
Компонент структуры | Значение |
---|---|
IpszMethod (метод) | "СЕТ" (Получить) |
IpszOueryString (строка запроса) | " " |
IpszPathlnfо (информация о пути) | "/ATLServerApp/ ATLServerApp srf" |
pbData (данные) | 0 |
Следующей вызывается функция ValidateAndExchange [На самом же деле для DLL_PROCESS_ATTACH следующей вызывается функция DllMain из ATLServerApp.dll. При обработке Web-запросов DllMain вызывается несколько раз, и в настоящем контексте она будет игнорироваться. Впрочем, обратите внимание, – этот первый вызов DllMain происходит потому, что динамически подключаемая библиотека DLL расширения интерфейса прикладного программирования Internet-сервера (ISAPI), ATLServerAppIsapi .dll, для обработки Web-запроса динамически загружает динамически подключаемую библиотеку (DLL) Web-приложения, ATLServerApp.dll]. Она просто отправляет в HTTP-ответ, определенное значение, которое указывает тип содержимого (text/html) Кроме того, эта функция полезна тогда, когда инициализацию и проверку надо проводить перед обработкой запроса.
И, наконец, в динамически подключаемой библиотеке (DLL) Web-приложения вызывается метод OnHello класса CATLServerAppHandler. Этот метод отправляет в HTTP-ответ текст "Hello World!" ("Здравствуй, мир!"). Получившиеся в результате данные, которые передаются на браузер, можно увидеть, просматривая исходный текст HTML []. [Комментарии вида <!– комментарий › вставлены для удобства – Прим ред.].
<html> <head> </head> <body> <! – тело – > This is a test: Hello World!<br> <! – Это – испытание: Привет, мир! – > </body> <! – тело – > </html>
Обратите внимание, что в .srf-файле указан метод-обработчик Default (Стандартный) в ATLServerApp.dll, а также дескриптор Hello (Привет), который будет заменен в результате подстановки, выполняемой динамически подключаемой библиотекой (DLL) Web-приложения.
{{handler ATLServerApp.dll/Default}} This is a test. {{Hello}} ({{обработчик ATLServerApp dll/Default}} Это – испытание: {{Привет}})
В исходном коде указанной динамически подключаемой библиотеки (DLL) ATLServerApp.dll видно, что атрибут обработчика Default (Стандартный) применяется к классу CATLServerAppHandler, в котором содержится метод OnHello с атрибутом tag_name, соответствующим дескриптору Hello (Привет). Это означает, что когда информационный сервер Internet (US) получает запрос именно на этот .srf-файл, то, чтобы текстовая строка заменяла дескриптор, т е передавалась в ответ на запрос клиента, информационный сервер Internet (US) загружает указанную динамически подключаемую библиотеку (DLL), находит названный класс и вызывает указанный метод OnHello.
[ request_handler("Default") ] // по умолчанию class CATLServerAppHandler { [ tag_name(name="Hello") ] // Привет HTTP_CODE OnHello(void) { m__HttpResponse " "Hello World'"; // Привет, мир! return HTTP_SUCCESS; }