Программирование в IIS

       

DLL-библиотека обработки запросов


DLL-библиотека обработки запросов, создаваемая мастером проекта сервера ATL, реализуется таким образом, что разработчик изменяет код в файле заголовка, имя которого отражает имя проекта. Прототип класса с именем C<имя_проекта>Handler находится в файле заголовка. В проекте NewSimpleATLServer классу присвоено имя CNewSimpleATLServerHandler. В следующем листинге файла NewSimpleATLServer.h этот класс выполняет роль шлюза между классами, представляющими создаваемое программное обеспечение для интернета, и файлами SRF. Весь код можно разместить в классе обработки, однако это сделает его сложным для чтения и работы. Наилучшей стратегией в данном случае является использование данного класса для поддержки атрибутов тегов замещения файла SRF и для построения классов системы согласно структуре программы.

Листинг 4.5.

(html, txt)

Класс CNewSimpleATLServerHandler выполняет следующие задачи:

  • вывод сообщения "Hello World";
  • подтверждение введенных пользователем данных;
  • вывод отчета пользователю о его имени и любимом цвете

Весь код проекта NewSimpleATLServer расположен в файле заголовка для упрощения примера. Функция ValidateAndExchange является первой функцией, вызываемой при обработке запроса в DLL-библиотеке обработки, поэтому экземпляр класса m_HttpRequest проверяется на отправленные посредством HTTP данные с помощью функции m_HttpRequest.GetFormVars и размещения данных в экземпляре класса ChttpRequestParams с использованием ссылки Formdata. Функция Validate ссылки Formdata определяет отправление указанного значения ввода, его соответствие заданному диапазону, после чего значение записывается в переменную. Например, для подтверждения введенного значения используется следующая строка фрагмента кода, в которой Fname – это переменная типа Cstring, предназначенная для записи имени пользователя с длиной от 1 до 10 000 символов.

Validate("firstname", &FName, 1, 10000, &c)

Макрос ATLTRACE повсюду встречается в листинге обработчика CNewSimpleATLServer наряду с различными выражениями отладки в качестве аргументов.
ATLTRACE размещает аргумент в окне WebDbg при выполнении на узле (см. рис. 4.12). WebDbg представляет собой утилиту, поставляемую в комплекте со средствами Visual Studio .NET. В группе программ Visual Studio .NET обычно находится ссылка для запуска данной утилиты и именем ISAPI Web Debug Tool.

После запуска утилиту WebDbg нужно присоединить к имени канала AtlsDbgPipe с помощью команды File\Select Pipe\Pipe Name (Файл\Выбрать канал\Имя канала). Отлаживаемый процесс должен иметь разрешение на запись в указанный канал. Аутентификационные данные, под которыми работает IIS, устанавливаются с помощью команды File\Permissions (Файл\Разрешения). Если WebDbg выполняется на том же компьютере, что и веб-сайт, группе Everyone предоставляются разрешение на запись в канал. Если работа сайта осуществляется удаленно, то следует указать аутентификационные данные для определенного компьютера или домена.

Утилита WebDbg принимает через канал сообщения от программы, осуществляющей запись в этот канал. Сообщения по мере записи отображаются в окне WebDbg. Пошаговая обработка кода с помощью Visual Studio .NET IDE является хорошим способом первоначального тестирования кода, однако для использования в тех средах, где будет находиться программное обеспечение после перемещения из среды сервера разработки, целесообразно применение команды trace.


Рис. 4.12.  Сообщения ATLTRACE, записанные в WebDbg

ATLTRACE работает только в конфигурации debug. Если программное решение скомпилировано в конфигурации release, макросы ATLTRACE игнорируются, и не нужно удалять какие-либо коды отладки. При запуске проекта NewSimpleATLServer пользователю отображается фраза hello world. Затем с помощью тега замещения HaveNameAndColor в файле SRF вызывается функция OnHaveNameAndColor. Она проверяет возвращаемое значение локальной переменной HaveNameandColor ("истина" или "ложь"), после чего возвращает соответствующий ответ, т.е. файл SRF либо отображает информацию, либо запрашивает у пользователя имя и любимый цвет.На рисунке 4.13 показан результат выполнения проекта NewSimpleATLServer после ввода пользователем информации. При получении результата, показанного на рисунке, файл SRF определяет значение, возвращенное переменной HaveNameandColor. Поскольку оно истинно, выполняется вызов функции OnYourFavoriteColor и OnYourName с помощью тегов замещения YourFavorityColor и YourName соответственно.


Рис. 4.13.  Результат выполнения проекта NewSompleATLServer после ввода пользователем информации


Содержание раздела