Если разработано достаточно сложное Web-приложение в стандарте
ISAPI(NSAPI), его необходимо отладить. Этот процесс существенно
отличается от общепринятой отладки обычных Windows-приложений в среде Delphi,
так как созданное Web-приложение запускается лишь в ответ на запросы,
получаемые от браузера клиента через Web-сервер. Запуск даже самого
простого Web-приложения непосредственно из среды Delphi 5.0.
невозможен, поскольку теряется его связь с Web-сервером. Тогда и
приложение не может получать запросы от клиента и, следовательно,
реагировать на них. Методы отладки определяются также типом Web-сервера.На платформе NT в качестве Web-сервера наиболее целесообразно с
точки зрения доступности использовать MS IIS версий 2—4, а в качестве
браузера MS IE —версии не ниже четвертой. Операционная система Windows
NT 4.0 поставляется в комплекте с MS IIS 2.0 (дистрибутив — в
I386\InetSrv). Можно также установить бесплатно распространяемый пакет
NTOptPak, в который входит MS IIS 4.0, более распространенная, чем
версии 2.0 и 3.0, и лишенная их недостатков.
Настройка отладки Web-приложения вместе с MS IIS 4.0 в
интегрированной среде Delphi достаточно сложна и трудоемка, главным
образом, из-за внесения множества изменений в реестр. Поэтому имеет
смысл сначала отладить такое приложение с MS IIS версии 2 или 3.
ISAPI- и NSAPI-приложения представляют собой динамические библиотеки
DLL с предопределенными адресами входа. Web-сервер запускает
Web-приложения передачей запросов на эти адреса. Для обеспечения их
связи нужно установить определенные параметры. Причем перед тем, как
начнется работа Web-приложения, Web-сервер должен быть остановлен.
При отладке Web-приложений с MS IIS в меню Run/Parameters вводится
следующее: Host Application: c:\winnt\system32\inetsrv\inetinfo.exe
(маршрут к файлу должен соответствовать фактическому) и Run/Parameters:
-e w3svc. Это позволит запускать MS IIS 2.0 и 3.0 и производить отладку
ISAPI DLL под управлением Web-сервера.
Если на сервере установлен MS IIS версии 4.0 или более поздней, то в
конфигурацию Windows NT 4.0 придется внести целый ряд изменений.
- С помощью утилиты-конфигуратора DCOMCnfg нужно изменить учетную
запись (user account) в разделе identify сервиса MS IIS Admin Service
на имя того пользователя, который будет выполнять отладку.
- С использованием редактора реестра (REGEDIT) или аналогичной
утилиты следует удалить имена LocalService из всех подключей, связанных
с аналогичными структурами IISADMIN, которые входят в ветвь реестра
HKEY_CLASSES_ROOT/AppID и HKEY_ CLASSES_ROOT/CLSID. Раздел LocalService
присутствует в составе следующих подключей:
{61738644-F196-11D0-9953-00C04FD919C1} // IIS WAMREG admin Service;
{9F0BD3A0-EC01-11D0-A6A0-00A0C922E752} // IIS Admin Crypto Extension;
{A9E69610-B80D-11D0-B9B9-00A0C922E750} // IISADMIN Service. Кроме того,
из двух первых подключей узлов AppID нужно удалить имя RunAs, а
последний дополнить значением Interactive User.
- Далее с применением REGEDIT необходимо добавить подключи
LocalService32 ко всем структурам, связанным с IISADMIN и относящимся к
узлу CLSID. Иными словами, каждый подключ узла CLSID, указанный в
предыдущем пункте, или любой другой, под которым найдено имя
LocalService keyword, следует дополнить подключом LocalService32. После
чего нужно установить по умолчанию для этих новых подключей значение:
c:\winnt\system32\inetsrv\inetinfo.exe -e w3svc (с учетом фактического
расположения файла inetinfo.exe).
- Следует установить в dword:3 значение Start для подключей:
HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\IISADMIN,
HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\MSDTC и
HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\W3SVC.
Чтобы вернуть реестр в исходное положение по окончании процесса
отладки, необходимо проделать обратные операции. Они достаточно
трудоемки и требуют повышенного внимания. Но можно автоматизировать
процесс перенастройки реестра, разработав собственную программу, что
поможет быстро определить его состояние без поиска, с помощью
стандартных средств просмотра и коррекции, и перейти от отладки к
работе ОС в штатном режиме. Такая программа предназначена для
многократного использования. В качестве основного класса при разработке
можно выбрать Tregistry, а для анализа, чтения и записи значений, а
также удаления подключей подойдут многочисленные методы этого
компонента: ReadKey, WriteFloat, WriteString, CloseKey, DeleteKey и т.
п.
Такая программа поможет также контролировать фактическое состояние
реестра в нужных подключах. Работа на этом уровне весьма ответственна,
поскольку любая ошибка может вызвать недопустимые изменения в важнейшем
для ОС механизме и привести к переустановке всей системы. Поэтому
целесообразно освоить основные методы чтения фрагментов реестра, а
удаление, создание и запись выполнять сначала только на тестовой ветви
системы. Если приводимый ниже текст (листинг 5) вставить, например, в
подпрограмму, реагирующую на событие открытия формы OnActivate, то в
окне Label1 при настройке реестра на режим отладки появится имя
подключа LocalServer32, а в окне Edit1 — соответствующее значение по
умолчанию: c:\winnt\system32\inetsrv\ inetinfo.exe -e w3svc.
Используя отлаженную программу, можно быстро и безошибочно изменять,
контролировать и восстанавливать необходимые настройки реестра. Для
удобства можно заменить числовую информацию пользовательскими терминами
и т. п. Предварительно, конечно, придется разработать и отладить
программу, вносящую нужные изменения в реестр.
При отладке Web-приложений с Personal Web Server под
управлением Windows 95/98 в меню Run/Parameters вводятся следующие
параметры: Host Application: c:\Program
Files\websvc\system\inetsw95.exe; Run Parameters: -w3svc. Они позволят
запускать Personal Web Server и отлаживать ISAPI DLL. Для настройки на
отладку Web-приложений с сервером Netscape Server версии 2.0 в
соответствии с рекомендациями фирмы Borland требуется дополнительно
изменить конфигурацию. Сначала следует скопировать файл ISAPITER.DLL
(из каталога Bin) в каталог C:\Netscape\Server\Nsapi\Examples (с учетом
фактического размещения файлов). Затем необходимо произвести
преобразования в серверных конфигурационных файлах, расположенных в
каталоге C:\Netscape\Server\Httpd-\Config.
- В файле OBJ.CONF file после строки Init fn=load-types
mime-types=mime.types требуется добавить строку Init
funcs=«handle-isapi,check-isapi,log-isapi» fn=«load-modules»
shlib=«c:/netscape/server/nsapi/examples/ ISAPIter.dll».
- В секции <Object name=default> файла OBJ.CONF перед
строкой NameTrans fn=document-root root=«C:/ Netscape/Server/docs»
нужно вставить строку NameTrans from=«/scripts» fn=«pfx2dir»
dir=«C:/Netscape/Server/ docs/scripts» name=«isapi».
- В конце файла OBJ.CONF необходимо добавить секцию <Object
name=«isapi»> PathCheck fn=«check-isapi» ObjectType fn=«force-type»
type=«magnus-internal/isapi» Service fn=«handle-isapi» </Object>.
- В конце файла MIME.TYPES следует добавить строку type=magnus-internal/isapi exts=dll.
Дополнения в первом и втором действиях вносятся одной непрерывной
строкой. Затем для отладки Web-приложений под управлением сервера
Netscape Fast Track требуется установить параметры Host Application:
c:\Netscape\server\bin\httpd\httpd.exe и Run Parameters:
c:\Netscape\server\httpd-<servername>\config. Они позволяют
запустить сервер, а также указывают путь к конфигурационным файлам.
Создание DLL-приложений для работы под управлением Windows NT также
имеет свою специфику. Необходимо расширить права пользователя так,
чтобы стало возможным отладить DLL-программы. Делает это администратор
Windows NT через программу User Manager, назначив Act As Part Of The
Operating System (работа в режиме операционной системы) в меню
Policies/User Rights (обязательно указав Show Advanced User Rights)
тому пользователю-программисту, который будет осуществлять операцию.
Подобная процедура неудобна потому, что по окончании отладки нужно
восстановить исходные права пользователя.
Перед запуском приложения следует установить в соответствующих
местах исходного текста программы точки прерывания таким образом, чтобы
при передаче Web-сервером запроса в DLL-приложение прерывалось бы
выполнение программы и можно было бы провести отладку.
После отладки DLL-приложения в формате ISAPI или NSAPI можно быстро
перекомпилировать исходные тексты в exe-файл формата CGI/WinCGI,
добавив отлаженный Web-модуль в репозитарий. При этом нужно присвоить
название Web-модулю, дать описание, выбрать страницу репозитария
(например, Data Modules) и иконку, указать фамилию автора. Созданный
Web-модуль сохраняется в качестве шаблона. Затем через меню File/New
следует вызвать мастер Web Server Application. В диалоге New Web Server
Application выбрать CGI или WinCGI. Стереть автоматически
сгенерированный Web-модуль и через меню File/New установить шаблон
отлаженного приложения, который был ранее сохранен на соответствующей
странице.
С помощью Delphi 5.0 можно создавать CGI/WinCGI-приложения, которые
в виде exe-файлов должны напрямую запускаться Web-сервером. Однако
методика их отладки несколько сложнее, чем DLL-приложений, поскольку
нужно моделировать сервер путем создания конфигурационного файла с
параметрами, включающими информацию из запроса. Затем нужно запустить
WinCGI-приложение, указав полные адреса файла, содержащего информацию
от клиента, и файла, в котором должен быть записан ответ. После этого
можно, как обычно, отлаживать Web-приложение.
Механизм работы CGI/WinCGI-приложений проще, чем у
ISAPI/NSAPI-приложений. При каждом обращении они запускаются в
отдельном потоке, поэтому пересечения с многопотоковым механизмом не
происходит. Кроме того, в CGI/WinCGI-приложениях не возникает проблем,
имеющих место при кэшировании Web-модулей ISAPI/NSAPI-приложений.
Таким образом, можно облегчить настройку при отладке Web-приложений,
используя упрощенную версию MS IIS 2.0. Полученные программы, как
правило, могут работать и под управлением MS IIS 4.0. При этом следует
учитывать некоторые незначительные на первый взгляд детали, которые
могут существенно затруднить процесс отладки серверных приложений,
как-то: проблемы с установкой состояния реестра, предварительная
настройка доступа к определенным каталогам и файлам и
последовательность выполнения операций.
Рассмотрим процесс отладки Web-серверного приложения iserver.dll,
предлагаемого разработчиками Delphi 5.0. Его исходные тексты
(iserver.dpr, main.pas, main.dfm) находятся в каталоге ...\Program
Files\Borland\Delphi5\ Demos\Webserv\, а файловая база данных — в
каталоге ...\Program Files\Common Files\Borland Shared\Data\. На этот
же каталог должен указывать и DBDemos, настраиваемый с помощью
программы-администратора bdeAdmin.exe, имеющейся в ...\Program
Files\Common Files\Borland Shared\BDE\.
Само DLL-приложение должно быть скомпилировано в каталог, из
которого Web-сервер может производить запуск exe-программ. Таковым
может быть, например, создаваемый по умолчанию (при установке
Web-сервера) виртуальный каталог Web-сервера SCRIPTS или аналогичный,
созданный заново. После внесения рекомендованных изменений в реестр NT
при отладке программы под управлением MS IIS 4.0 Web-сервер может
запускаться только из среды Delphi 5.0. А в случае использования MS IIS
2.0 или 3.0 за работой Web-сервера приходится следить программисту,
запуская и останавливая соответствующий сервис World Wide Web
Publishing Service из окна Services панели управления.

Перед отладкой MS IIS должен быть остановлен, а начинать работу он
будет запуском Web-приложения (DLL-программы) из среды Delphi 5.0.
Сначала разумно проверить, работает ли уже отлаженное приложение, такое
как демонстрационный пример Iserver.dll. Для этого нужно поместить
исходный файл в раздел SCRIPTS. В окне Services следует проверить,
подключен ли сервис Wide Web Publishing Service, если же нет — нужно
нажать кнопку Start. Затем в окне браузера требуется набрать имя ПК или
IP-адрес.
Иногда программа полностью не запускается, хотя все вроде бы
выполнено правильно, т. е. MS IIS работает и есть доступ к запуску
DLL-приложения. В этом случае могут появиться сообщения о «внутренней»
ошибке сервера, например о неудачной инициализации BDE, невозможности
работать с закрытой таблицей и т. п. Подобная информация
свидетельствует об отсутствии права пользователя на доступ к каталогу
...\BDE\ и/или ...\DATA\, который, если необходимо, открывается или
закрывается нажатием правой кнопки мыши на свойствах
(properties/Security/permissions) соответствующего компонента (диска,
каталога или файла).
Перед запуском MS IIS нужно установить протокол TCP/IP и выбрать
какой-нибудь (фиктивный) IP-адрес, например 222.10.1.220, поскольку при
разработке и отладке серверных приложений ПК следует отключить от
Internet. Работу TCP/IP можно протестировать, набрав сначала консольную
команду ping 127.0.0.1, а затем ping 222.10.1.220. В случае успешной
установки протокола будет получен ответ типа ‘Reply from 127.0.0.1:
bytes=32 time<10ms TTL=32’, а при неверной конфигурации — Pinging
222.10.1.220 with 32 bytes of data: Request timed out’.
Включившись в работу, завершите функционирование MS IIS из окна
Services панели управления. Затем, запустив Delphi 5.0 и открыв
указанный проект, расставьте точки останова в тексте модуля main, а
после установки параметров загрузите отлаживаемый модуль через меню
Run/Add Breakpoint/Module Load Breakpoint. Откройте окно Modules, нажав
комбинацию клавиш <Alt>+<Ctrl>+m, и убедитесь, что там есть
строка: iserver.dll not loaded. Потом, набрав комбинацию клавиш
<Ctrl>+<F9> (или нажав кнопку Run), запустите Web-сервер. В
окне Modules появится список модулей, запущенных под управлением MS
IIS, но отлаживаемый модуль еще не будет загружен.
Функционирование модуля начнется после запуска браузера и набора
строки типа http:// 222.10.1.220/scripts/iserver.dll/. При этом в окне
Modules можно увидеть все входные точки и модули, связанные с
отлаживаемым приложением (рис. 7). Затем начнется непосредственная
отладка, и в iserver.dpr на строке Application.Initialize курсор
остановится. Теперь нужно снова запустить приложение, нажав кнопку Run.
Следующий останов будет в точке прерывания. Время соединения браузера с
сервером ограничено определенными параметрами настройки браузера, а
потому не следует медлить, иначе связь клиент—сервер прервется и
процесс отладки прекратится. Тогда можно увеличить время соединения и
продолжить отладку.
В заключение следует отметить, что ответы на многие вопросы,
связанные с рассматриваемой тематикой, вы найдете в приведенном ниже
списке литературы.
Литература
1. Developer’s Guide. Borland Delphi 5 for Windows 95 & Windows NT. Inprise Corp.
2. Калверт Ч. Delphi 4. Энциклопедия пользователя. — Киев: ДиаСофт, 1998.
3. Тейксейра С., Ксавье П. Delphi 4. Руководство разработчика. — Киев; М.: Вильямс, 1999.
4. Дарахвелидзе П.Г., Марков Е.П. Delphi 4. — СПб.: БХВ—Санкт-Петербург, 1999.
5. Канту М., Гуч Т. Delphi. Руководство разработчика. — Киев: Век++; М.: Энтроп, ДЕСС, 1999.
6. Чен В., Берри В. Реестр Windows NT для профессионалов. — СПб: Питер Ком, 1999.
7. Даниэлс Т. 1001 секрет Windows NT. — М.: Русская редакция, 1999.
8. Microsoft Internet Information Server. — М.: Русская редакция, 1997.
9. Microsoft Internet Information Server 4.0 и Microsoft Proxy Server 2.0. — М.: Русская редакция, 1997.