Иллюстрированный самоучитель по Architecture .NET

Создание и запуск проекта на основе 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;
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.