Architecture Net или что такое Microsoft.NET?




Динамически подключаемая библиотека (DLL) Web-приложения

Если в проекте динамически подключаемой библиотеки (DLL) Web-приложения вы откроете заголовочный файл ATLServerApp.h, то увидите определение класса CATLServerAppHandler. Атрибут request_handler (обработчик запросов) говорит о том, что класс будет открыт как обработчик запросов на основе ATL Server. Этот обработчик будет называться Default (Стандартный). В классе CATLServerAppHandler используется взятый для примера метод OnHello, имеющий атрибут tag_name (имя дескриптора), в котором указано имя Hello (Привет). Вскоре вы увидите, как эти атрибуты связаны с реальным клиентским запросом. Обратите внимание, насколько легко с помощью такого элемента данных, как m_HttpResponse (Http-ответ), отправлять клиенту данные, предназначенные для замены дескрипторов, используя для этого оператор вставки потока.

[ request_handler("Default") ] // По умолчанию class CATLServerAppHandler
{
private: // частный
// Поместить сюда частные элементы
protected: // защищенный
// Поместить здесь защищенные члены
public:
// Поместить здесь общедоступные члены
HTTP_CODE'ValidateAndExchange() {
// TODO: Put all initialization and validation ...
// TODO: Поместить весь код инициализации
// и проверки правильности...
// Установить совместимый тип
m_HttpResponse.SetContentType("text/html"); // текст/HTML
return HTTP_SUCCESS; }
protected: // защищенный
// Вот пример того, как использовать замену... [ tag_name(name="Hello") ] // Привет HTTP_CODE OnHello(void) {
m_HttpResponse « "Hello World!"; // Привет, мир!
return HTTP_SUCCESS;
}
};
// класс CATLServerAppHandler

Динамически подключаемая библиотека (DLL) Web-приложения работает вместе с .srf-файлом. На самом деле указанный файл является HTML-файлом, в котором могут находиться переменные дескрипторы данных, расположенные внутри двойных фигурных скобок. Эти дескрипторы являются заглушками, которые при обработке запроса будут заменяться процессором шаблонов библиотеки шаблонных классов ATL В каждую заглушку вставлен метод из того класса, который реализуется в динамически подключаемой библиотеке (DLL) Web-приложения.
Чтобы заглушкам в двойных скобках, находящимся в .srf-файлах, поставить в соответствие те или иные методы из динамически подключаемой библиотеки (DLL) вашего Web-приложения, в ATL Server предусмотрены необходимые для этого атрибуты. Каждый такой метод генерирует HTML-код, который должен заменять соответствующие дескрипторы заглушек из . srf -файла.
В Solution Explorer (Поиск решения) откройте узел проекта ATLServerApp, а затем откройте файл ATLServerApp.srf. Обратите внимание, что в этом файле содержатся текст и показанные внизу дескрипторы замены. Теперь сравните ATLServerApp. srf с кодом из показанного выше файла ATLServerApp.h. Вы должны заметить— класс CATLServerAppHandler помечен атрибутом request_handler как "Default" ("Стандартный"), что соответствует находящемуся внизу дескриптору обработчика, содержащему слово Default (Стандартный). Кроме того, данный дескриптор указывает имя динамически подключаемой библиотеки (DLL) Web-приложения, а именно ATLServerApp . dll. Это немаловажно, потому что в одном и том же виртуальном каталоге может находиться любое количество динамически подключаемых библиотек (DLL), относящихся к Web-приложению. В результате, для замены дескриптора этот . srf-файл будет использовать класс CATLServerAppHandler.
Кроме того, обратите внимание, что в показанном выше коде атрибут tag_name (имя дескриптора) указывает имя "Hello" ("Привет"). Данный дескриптор соответствует находящемуся внизу дескриптору из файла . srf, содержащему слово Hello (Привет). А это, в свою очередь, означает, что дескриптор Hello (Привет) будет заменен текстом, записанным выше в элемент данных m_HttpResponse с помощью метода OnHello [В одном . srf-файле для Web-приложения можно указывать больше одной динамически подключаемой библиотеки (DLL). Подробнее об этом говорится в документации по ATL Server ]. В коде пусковой системы, сгенерированном мастером, "Default" ("Стандартный") и "Hello" ("Привет") используются исключительно как примеры, которым мы можем следовать. А при добавлении своего собственного кода мы вполне можем для атрибутов обработчика запросов и атрибутов имен дескрипторов использовать какие-то другие, более значимые имена.

{{handler ATLServerApp.dll/Default}}
This is a test: {{Hello}}
({{обработчик ATLServerApp.dll/Default}}
Это - испытание: {{Привет}})