Отладка серверных Web-приложений на Delphi 5.0
Если разработано достаточно сложное
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= fn= shlib=.
В
секции <Object name=default> файла OBJ.CONF перед
строкой NameTrans fn=document-root root= нужно вставить строку
NameTrans from= fn= dir= name=. В конце файла OBJ.CONF
необходимо добавить секцию <Object name=> PathCheck fn=
ObjectType fn= type= Service fn= </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.
Контроль настройки реестра
NT при отладке Web-приложений под управлением IIS
4.0 var Reg:
TRegistry; begin try Reg:=TRegistry.Create; Reg.RootKey:=HKEY_CLASSES_ROOT; Label1.Caption
:= 'LocalServer32'; if
Reg.OpenKey('\CLSID\{A9E69610-B80D- 11d0-B9B9-00A0C922E750}',False)
then begin if not
Reg.OpenKey('\CLSID\{A9E69610- B80D-11d0-B9B9-00A0C922E750}'+
'\' + 'LocalServer32',False) then Edit1.Text :=
'' else Edit1.Text :=
Reg.ReadString(''); end; Reg.CloseKey; finally Reg.Free; end;
//try
Reg:=TRegistry.Create;
Автор: Александр Чубуков
Источник: www.pcweek.ru
|