Delphi. WebBroker. ISAPI приложение

В данном посте рассмотрим старую-добрую дельфийскую технологию WebBroker. Скажу сразу, этот пост больше для теории, для понимания основ ISAPI и CGI приложений, нежели для практического применения. Но, тем не менее мне было интересно узнать про технологию WebBroker, о которой я так много слышал.

Цель данного поста

Построить простейшее ISAPI приложение и разобраться с основами веб-программирования в Delphi по технологии WebBroker.

Какой набор программ потребуется?

Delphi RAD Studio (у меня XE10 Seattle)

IIS – Internet Information Server – программа-сервер, от компании Microsoft (у меня на борту Windows 8.1 стояла версия IIS 8.5, единственное, нужно было её активировать).

ISAPI (согласно Чарльзу Калверту) – сформируем в Dephi на ходу – dll библиотеки расширений веб-сервера (Microsoft IIS) – после загрузки остаются в памяти, дожидаясь следующих запросов клиента (cgi, в отличие от ISAPI, удаляются из памяти после окончания запроса – поэтому с CGI транзакций больше, но больше и стабильности, в теории).

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

Технически, ISAPI приложение имеет расширение dll, поэтому запустить его напрямую, скажем не получится как exe. Вообще говоря ISAPI приложение мне чем-то напоминает PHP скрипт, для обработки которого также нужен сервер, например Apache. Иными словами, как только мы создадим ISAPI приложение нам тут же надо будет настроить сервер, я выбрал IIS сервер от компании Microsoft.

FILE | NEW | OTHER

1

Выбираем ISAPI DLL

2Выбираем FireMonkey (тут, в принципе на вкус и цвет)

3

Итак, если все нормально, у нас должны появиться 2 вкладки

4

Если мы зайдем в код WebModuleUnit, то увидим следующий обработчик

5

 

Обратите внимание – WebModule1DefaultHandlerAction – то есть это некоторая реакция, которая задается по умолчанию. То есть на запрос этого сценария мы получим то, что написано в Response.Content, а именно – нам вернется Title страницы и Body – в браузере мы увидим именно их.

Что нужно сделать дальше?

Скомпилировать проект (Project | Compile Project1). Именно скомпилировать !!!

Обратите внимание, если вы попробуете нажать на “ПЛЭЙ”, то программа попросит Вас настроить хост приложение. 

6

 

Первый вариант решения проблемы

В принципе, его можно настроить, если зайти в настройки (Run | Parameters). И тогда перед нами предстанет такое окно…

7

 

После настройки параметров, наверное все заработает – я этот вариант не пробовал, но о нем пишет Bob Swart в книге Charlie Calvert “Энциклопедия Delphi”.

Второй вариант решения проблемы

Поскольку мы пишем под Веб, то  логично было бы запускать программу прямо из браузера. Но для этого нужно настроить сервер IIS – о том как это сделать я скажу чуть позже. Итак, остановимся пока на варианте запуска нашего веб-приложения напрямую из браузера. 

Как обратиться к приложению ISAPI на сервере ?

Самый простой, элементарный вариант!

Допустим мы скомпилировали наш ISAPI модуль и в папке Win32 обнаружили файл Project1.dll, или любое другое название, в зависимости от того как Вы назвали проект, у меня это Project1.dll – по сути это серверный сценарий, который отрабатывает и выдает некоторый результат в браузер. Чтобы все отработало правильно, нужно положить этот Project1.dll в нужную папку нашего сайта (у меня это C:\WebAps), которую знает IIS.

После настройки сервера IIS можно обратиться, например так

И тогда мы получим такой результат… Чуть позже мы настроим сервер IIS, чтобы узнать как это все заработало !

8

Как обратиться к этому сценарию на сервере из HTML кода?

Теперь пример поинтереснее!!!

Для начала создадим этот HTML код  – самое простое это форму с логином / паролем и кнопкой отправить

Вот как эта форма будет выглядеть на сервере хостинга Digital-flame.ru


Логин:
Пароль:

 


Обратите внимание !!!

Строка

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

Внимание, для того, чтобы могли обратиться по адресу

Нужно код HTML cсохранить в текстовом файле, сохранить его с расширением, например Myhtml.html и положить его в папку C:\WebApps

Сам сценарий мы немного перепишем – для этого можно создать другой проект WebBroker либо в том же самом заменить код для компиляции нового DLL… (Итого, в папке C:\WebApps будут Project1.dll и Project2.dll)

Что делает этот код? Здоровается с миром, и, в зависимости от типа запроса выдает тот или иной ответ. Итак, скомпилируем его. Вот такой результат должен получиться в браузере, если обратиться к сценарию в чистом виде, без параметров GET | POST.

9

Как настроить сервер IIS для запуска ISAPI приложения?

Теперь одна из самых важных вещей – настройка сервера IIS. Об этом я уже много и подробно писал в длинной и подробной статье “Delphi+UniGui. Пишем первый “Hello World” под WEB. Легко и просто”, поэтому в принципе, материал той статьи подойдет в большинстве своем и для этой статьи. Пэтому, часть того материала, я просто копирую.

Обратите внимание!!! Единственная разница – приложение в примере выше при настройке сервера IIS (при подготовке статьи) я назвал myapp, а в примере ниже mywebapplication (так как на тот момент готовил другую статью)

поэтому разница в адресах будет следующая

Для примера выше http://localhost/myapp/Project2.dll 

Для примера ниже http://localhost/mywebapplication/Project1.dll

Соответственно, чтобы заработал пример выше, нужно при создании  приложения (см. пример ниже – при настройке IIS ) назвать его myapp

 Основные шаги по настройке IIS

Добавляем новый пул приложений

8

 

Назовем его, скажем, MyWebApps, версия среды – без управляемого кода, режим конвейера – встроенный. Делаем все как на картинке ниже

9

 

Заходим в настройки…

10

 

Включаем поддержку 32-разрядных приложений

12

 

Далее, настраиваем параметры перезапуска

14

 

Жмем Ок, выходим из этого окна.

Далее идем в сайты и добавляем новое приложение

15

 

 

Выбираем псевдоним, пул приложений, физический путь. Внимание, в этом месте вместо псевдонима MyWebApplication – поставьте myapp, чтобы пример выше из этого поста заработал.

16

Выбираем физический путь, например C:\WebAps

7

 

Далее, 2 раза кликаем на MyWebApplication на дереве слева

17

 

Далее, убеждаемся что ISAPI-dll находится в группе Enabled (Включен), если в группе Disabled (Выключен), то…

18

 

Включаем, если отключен

19

 

 

Далее20
Далее, добавляем приложение в число разрешенных…

21

 

Выбираем физический путь

22

 

В итоге должно получиться так…

23

 

Далее, можно попробовать открыть браузер и набрать в адресной строке

http://localhost/mywebapplication/Project1.dll

 

На что мы получим такую ошибку

24

 

Для того, чтобы избежать этой ошибки, нужно в IIS проделать следующее

26

 

Потом необходимо включить анонимную проверку подлинности

27

 

После этого можно пройти по адресу

Ввести некоторые значения логина / пароля

и получить результат от сценария по адресу

Я ввел значения Stas  Stas и получил такой ответ сервера

В принципе все, на этом пост закончу, так как для понимания теории – что такое ISAPI, думаю достаточно.

Выводы

  1. Создали ISAPI приложения в Delphi в нескольких вариантах, для того, чтобы посмотреть как браузер общается с сервером.
  2. Разобрались как настраивать сервер IIS для работы с ISAPI.
  3. Протестировали его и получили результат – главный результат в данном случае теоретическое понимание как писать на Delphi под Web – познакомились с основными действующими лицами ISAPI приложениями, IIS сервером от Microsoft, технологией WebBroker.
  4. Стоит ли применять технологию WebBroker при разработке серверных программ? Решать Вам, но на мой взгляд она достаточно трудоемкая и универсальная. Лучше, наверное остановиться на связке Delphi+UniGui, о которой я писал в соседнем посте, так как там вся мощь визуального проектирования и скорости разработки.
  5. Тем не менее, понимание этой технологии улучшит понимание Delphi+UniGui, что повысит качество кода.