ISAPI / NSAPI
Итак, что такое CGI? Что это такое, документацию, статьи вы можете найти в интернете. Для платформы WIN32 существует три вида CGI интерфейса, поддерживаемых Delphi.
- ISAPI - Стандарт Internet Server API изначально был создан как Microsoft Information Server API, но в дольнейшем был предложен в качестве открытого стандарта.
- NSAPI - Стандарт Netscape Server API используется для взаимодействия с серверами компании Netscape
- CGI - Common Gateway Interface (стандартный интерфейс шлюза) был первой попыткой интеграции WWW-серверов и отдельных программ.
- WinCGI - Windows вариант CGI
Поскольку компании Netscape приняла стандарт ISAPI, в данный момент реально существует единый формат для Internet Information Server (IIS) и серверов компании Netscape. Поэтому воспользуемся предоставляемым Delphi инструментарием для создания ISAPI DLL, которая будет отвечать на запросы клиентов.
Создание ISAPI библиотеки
Создание ISAPI DLL похоже на разработку любой стандартной DLL. Для этого необходимо загрузить Delphi, в меню File выбрать пункт New,
затем в диалоговом окне New Items выбрать пиктограмму Web Server Application и нажать кнопку OK. Появится диалоговое окно New Web Server Application.
Пункт ISAPI/NSAPI Dynamic Link Library выбран по умолчанию, поэтому нажимаем кнопку OK.
Вы попали в интерактивную среду разработки ISAPI расширения сервера. В вашем проекте содержится специальный модуль WebModule, он позволяет помещать в него различные компоненты и обеспечивает работу с ними.
Если дважды щелкнуть мышкой на WebModule, появится Action Editor, предназначенное для создания и редактирования обработчиков событий ActionItem. Для создания ActionItem следует нажать кнопку Add New, при этом в окне Object Inspector отобразятся свойства и события созданного ActionItem.
Специальные компоненты, облегчающие создание динамических страниц расположены , также, на странице Internet палитры компонентов. Это - PageProduсer и ему подобные, предназначенные для генерации динамических HTML страниц.
Познакомимся с основными объектами и классами ISAPI поближе.
WebModule
WebModule - автоматически создаваемый модуль
для приложений Web-сервера.
Когда новое Web приложение создано, оно автоматически
содержит
WebModule. Это дает возможность созданному Web
приложению ответить на запрос HTTP, пропуская запрос и ответ к
соответствующим обработчикам ActionItems. Приложение может
содержать только один WebModule.
WebModule имеет два важных свойства
Request
и Response
с которыми мы познакомимся немного позже, а также события:
OnCreateПроисходит когда приложение создает
WebModule. Следует использовать это событие для инициализации переменных и объектов, содержащихся в приложении. Например, если модуль содержит базу данных, приложение может установить подключение базы данных.
OnDestroyПроисходит перед уничтожением
WebModule. Используйте это событие для освобождения объектов, созданных динамически в приложении.
BeforeDispatchПроисходит перед тем, как диспетчер устанавливает соответствие запроса HTTP с каким-либо
ActionItems. Используйте обработчик событияBeforeDispatchдля предварительной обработки HTTP запроса.
AfterDispatchПроисходит после того, как HTTP ответ был успешно сформирован
ActionItems, но еще не передан клиенту. Используйте обработчик событияAfterDispatch, например, для проверки сформированного HTTP ответа.
Request
Request - автоматически создаваемый объект
WebModule.
Request представляет текущий HTTP запрос в
удобной форме для обработки. Об отдельных свойствах этого компонента
следует сказать особо.
ContentFieldsПедоставляет содержимое полей POST запроса. Используйте
ContentFields, чтобы читать содержимое полей запроса HTTP, при использовании метода POST.
QueryFieldsПедоставляет параметры и их значение в случае передачи их запросом в URL документа. Используйте
QueryFields, чтобы читать поля запроса HTTP, при использовании метода в котором параметры передаются в URL документа, например метод GET.
ContentFields и
QueryFields
возвращаю параметры передаваемые клиентом, это обьекты наследованные от
класса TStrings, данные в них представлены в виде имя =
значение.
Response
Response - также автоматически создаваемый
объект WebModule.
Объект
Response содержит информацию, которая
будет передана клиенту, в результате обработки запроса. Заполнять
Response необходимо вам. После того как все свойства будут
заполнены, будет сформирован HTTP ответ, который и будет передан клиенту.
Среди свойств объекта
Response следует
обратить внимание на:
ContentTypeУказывает тип содержимого HTTP ответа в соответствии со спецификацией MIME. Используйте
ContentType, чтобы установить тип содержимого передаваемого клиенту, например, если вы передаете изображение в формате GIF, вы должны установитьContentType = 'image/gif'.
ContentСодержит информацию, передаваемую клиенту в ответ на сообщение запроса HTTP. Используюте
Content, чтобы передать требуемую информацию клиенту.
ContentStreamОпределяет
Streamобъект, который будет передан клиенту. ИспользуйтеContentStreamдля передачи клиенту содержимого отличного отContentType = 'text/*', например при передаче бинарного файла. Если свойствоContentStreamустановлено, оно заменяет свойствоContent.
Как это работает
В общем случае так. При выполнении HTTP запроса, веб сервер запускает на выполнение ваше ISAPI приложение.
Создается объект
Application, порожденный от
TISAPIApplication или
TCGIApplication.
TISAPIApplication и
TCGIApplication
в свою
очеродь имеют общего предка TWebApplication
и перекрывают все
его виртуальные методы. Объект Application создается
автоматически от нужного класса, в зависимости от того, какой тип (ISAPI
или CGI) приложения Вы выбрали, об этом заботится визард Delphi.
Следующим автоматически создается объект
WebModule, созданный от класса
TWebModule, и
генирируется событие TWebModule.OnCreate. Затем
WebModule создает все обьекты
ActionItems и
генерирует событие TWebModule.BeforeDispatch. После обработки
события BeforeDispatch назначается обьект
ActionItem, котрый получает возможность обработать запрос.
Обработку запроса и формирование ответа должны производить Вы, анализируя
обьект Request и заполняя
Response. Все это
можно сделать на событии ActionItem.OnAction. В большинстве
случаев, для того чтобы сформировать ответ необходимо заполнить свойство
Content обьекта
Response. После отработки
собития OnAction обьекта (или обьектов)
ActionItem происходит формирование HTTP ответа и
генерируется событие TWebModule.AfterDispatch, затем ответ
отсылается клиенту.
Следующим, последним, событием генерируется
TWebModule.OnDestroy.
Внимание:В случае ISAPI приложения, объект WebModule может быть создан один раз и не создаваться при каждом запросе, следовательно не будут генерироваться события OnCreate и OnDestroy объекта WebModule.
Оставить комментарий
Комментарии


где и как расположить библиотеку
будет ли сразу она работать или её надо какимнибудь образом регестрировать да и как проверить iis что он вообще может запускать isapi расширения
