Программирование >>  Руководство по созданию web приложений 

1 ... 103 104 105 [ 106 ] 107 108 109 ... 141


cout cout

break;

При этом для каждой строки набора записей мы формируем одну строку таблицы в выходном документе HTML.

Перед - - своей работы функция getHanaciers записывает в выход-

ной поток закрывающий тег таблицы: cout

Обработка ощибок, возникающих при к базе ; выполняется

при помощи функции .AcloErrHaadlar: catchC cam arror e>: i

return;

В эту функцию мы также внесли незначительные изменения, касающиеся формата вывода сообщений. Теперь эти сообщения будут отображаться не в консольном окне, а в документе поэтому для форматирования нам при-

щлось использовать соответствующие теги ПТМТ.

Создание приложений ISAPI

в этом разделе речь пойдет о приложениях ISAPT дополняющих возможности сервера Microsoft Information Server. эти приложения можно разделить на две группы: расширения ISAPI и фильтры ISAPI.

Первые по назначению напоминают только что Вами про-

граммы CGI. Однако в отличие от . эти расширения выполнены в виде

библиотек динамической загрузки DTT, что имеет ряд

Так же как и программы С Cil, расширения ISAPI данные от брау-

(например, из формы, заполненной посетителем сервера . обрабатывают их и ответ браузеру в виде динамически сформированного документа ПТМТ. Однако вместо содержимого переменных среды и стан-потока ввода ISAPI получает данные при помощи ально предназначенных для этого функций. Аналогично вместо записи выходных в стандартный поток вывода ISAPI вызывает специальные функции.

Фильтры ISAPI также реализуются в виде библиотек DTT, однако они имеют другое назначение. Фильтры ISAPI способны контролировать весь поток данных, проходящий через сервер, на уровне протокола ПТТР. Поэтому их можно применять для решения таких задач, как шифрование или перекодирование данных, компрессия информации. Они пригодны для создания собственных процедур подключения пользователей к системе и аутентификации (проверки идентификации пользователей), а также для сбора статистической информации использования ресурсов сервера.



Принципы работы и структура расширения ISAPI

Как что бьшо сказано, . ISAPI создается в виде библиотеки

динамической загрузки DLL. Обращение к такой библиотеке выполняется в документах HTML аналогично обращению к CGI - из форм или

ссылок, при помощи тегов <F0 и <А>.

Когда I. обращается к расширению ISAPI, соответствующая биб-

лиотека DLL загружается в пространство сервера Microsoft Information

Server и . его составной частью. Так как . ISAPI работает

в рамках сервера Microsoft Information Server, а не в рамках отдельно-

го процесса (как это происходит при запуске программы CGI), оно может пользоваться всеми ресурсами, доступными серверу. Это благоприятно сказывается напроизводительности.

Производительность сохраняется на достаточно высоком уровне и в тех случаях, когда расширение сервера используется активно сразу многими пользователями.

Если, скажем, 20 пользователей одновременно одну и ту же програм-

му CGI, то на сервере будет создано 20 процессов - по одному для каждого пользователя. Так как создание отнимает достаточно много системных

ресурсов, это к потере производительности.

Если же 20 пользователей одновременно обратятся к одному и тому же расширению ISAPI, в память серверного процесса будет загружена и.ша копия библиотеки DTT, содержащая расширение. Она будет работать в многопоточном режиме. Очевидно, при этом полностью исключаются накладные расходы системных ресурсов на запуск процессов.

Сравнивая CGI и расширения ISAPI, нужно заметить, что, не-

смотря на существенное превосходство в быстродействии расширений ISAPI, программы CGI также имеют свои преимущества.

Так как расширения ISAPI работают в рамках серверного процесса, они должны отлаживаться особенно тщательно. Ошибка в расширении ISAPI способна вызвать аварийное завершение работы всего сервера Microsoft Information Server. Что же касается CGI, выполняющейся как процесс

в своем собственном адресном пространстве, то она едва ли способна вывести из строя сервер. Если в программе критическая ошибка, это

ведет всего лишь к аварийному завершению самой программы, но не сервера.

Папомним, что расширение ISAPI работает в многопоточном режиме, что приводит к дополнительным при отладке.

Вызов расширения ISAPI сервером Web

Структура расширения ISAPI очень Библиотека DTT дол-

жна экспортировать всего две функции с именами и Http-

ExtensionProc. Первая предназначена для того, чтобы расширение могло сообщить серверу версию спецификации, которой оно и строку описания расширения. Функция HttpExtensionProc выполняет всю работу по передаче данных между расширением и сервером.

Дополнительно расширение ISAPI способно экспортировать . riaieE) . , Она вызывается . . перед тем, как ненужное больше при-



CHAR . -. : - : -. - .

Константы.! .. г....: и HSE VERSION MAJOR указывают . вер-

сию интерфеггса расширения ISAPI и также определены в фаггле httpext.h:

ttdefine . ; - 4 верхний номер версии ttdefine !. : г : . i: О нижний номер версии

функция

Теперь рассмотрим вторую функцию, которую должна экспортировать библио-текаВТТ . ISAPI. Она называется HttpExtensionProc и имеет ющи11 прототип:

DWORD WINAPI : ::- ::. - COHTftOLJLOCE .рЕЕВГ

Функция nttpExtensionProc получает единственньш параметр - указатель на структуру типа . г ; ;: ; .:; . определенную в фаггле littpext.li:

typedef stmrt я <- > .г : <

DWORD cbSize; размер структуры в байтах

DWORD \ ь.., версия спецификации ISAPI

HCONN гопп III; идентификатор канала

DWORD .:. , код состояния HTTP

CHAR . Mi : , JUEFFfE .LEN]; текстовая строка,

ным нулем, в которой находится информация протоколирования, специфичная для данного расширения

.... : ISAPI выгружается из памяти. Функция Твгшг должна

освободить . ; . :: полученные при инициализации расширения ISAPI. Функция t 1

функция GetExtensionVersion очень проста в реализации и обычно выглядит следующим образом:

BOOL . ; . . ит *pVersion)

г . .;. . ШОВ):

Is...... :

My ISAPI Application Name , HaE .MAX, EXT DLLNAHELEfl}; return TRUE;

При вызове функции GetExtensionVersion указатель на структуру типа HSE VERSION INFO ; [ . . i через единственньш параметр. Эта структура и указатель на нее (типа LPHSE VERSION INFO) . в фаггле следующим образом; #define

typeclifstruct HSE VERSION INFO



1 ... 103 104 105 [ 106 ] 107 108 109 ... 141

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика