Главная » Delphi » Мастер активных объектов сервера

0

Delphi 6 Enterprise  содержит мастера, существенно ускоряющие создание актив ных объектов сервера. Активные объекты можно  создавать и в Delphi  6 Professional, но тогда  вручную придется выполнять большие  объемы  работ.  Пользователи, будьте благоразумны, если время  создания приложения является критическим фактором, то рассмотрите возможность перехода на версию Enterprise.

Хранилище объектов (Object Repository) Delphi 6 Enterprise содержит во вкладке ActiveX мастера, позволяющие создавать новые  активные объекты сервера. Чтобы создать  новый активный объект сервера (упоминаемый далее как объект ASP), следует закрыть все  открытые проекты (если  они  есть)  и  начать  новый проект библиотеки ActiveX (ActiveX Library), которая будет содержать создаваемый объект ASP. Для этого необходимо выполнить следующие действия.

1.  Запустите Delphi  6 и закройте проект по умолчанию.

2.  В меню File (Файл)  выберите пункты New (Новый) и Other (Другой), а затем  во вкладке ActiveX хранилища объектов Delphi  6 (рис. 22.1) выберите пиктограмму ActiveX Library (Библиотека ActiveX).

3.  Сохраните проект библиотеки как файл D6ASP.dpr.

Рис. 22.1. Пиктограмма ActiveX Library во вкладке ActiveXCОВЕТ

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

-np. Перейдите в группу программ, содержащую ярлыки Delphi 6, и измените способ

запуска.

Для этого щелкните правой кнопкой мыши на панели задач и выберите в контекстном меню пункт Properties (Свойства). Перейдите во вкладку Start Menu Programs (Настройка меню) и щелкните на кнопке Advanced (Дополнительно). Теперь рассмот- рим пункты меню Start (Пуск). Перейдите в группу программ All Users (Все пользовате- ли), которая будут содержать группу ярлыков Borland  Delphi  6.  Выберите элемент Delphi 6, щелкните на нем правой кнопкой мыши и в появившемся контекстном меню выберите параметр Properties. Перейдите во вкладку Shortcut (Ярлык) и добавьте в ок- не редактирования Target (Объект), справа от текущего значения, параметр -np, чтобы

командная строка выглядела в результате примерно так:

"C:\Program Files\Borland\Delphi6\Bin\delphi32.exe " -np

Кроме того,  это  хорошее  место, чтобы пересмотреть значение  параметра Start  In

(Рабочая папка), определяющего исходный каталог для запуска Delphi 6.Теперь, сохранив только  что созданную библиотеку ActiveX (под именем D6ASP.dpr), в нее  можно  добавлять активные объекты сервера. Для  этого  достаточно выбрать во вкладке ActiveX хранилища объектов Delphi 6 пиктограмму Active Server Object (Активный объект сервера), как показано на рис. 22.1.

Это вызовет диалоговое окно  Delphi 6 New Active Server Object (Новый активный объект сервера),  показанное на  рис. 22.2.  Для  тех,  кто  видит  такое  окно  впервые (особенно при  отсутствии опыта  работы с объектами COM и ASP), приведем ряд по яснений.

Рис. 22.2. Диалоговое окно New Active Server Object

В поле  редактирования CoClass Name указывается внутреннее имя объекта COM. Обычно здесь можно  ввести  любое  имя. Например, в настоящей главе  использовано имя DrBob42. Это приведет к тому, что именем класса, производного от TASPObject, будет TDrBob42, а реализуемый интерфейс, соответственно, IDrBob42. Параметр Threading Model (Потоковая модель)  установлен по умолчанию в состояние Apart- ment, а Instancing (Способ создания экземпляра) — в состояние Multiple Instance (Несколько экземпляров). Это подходит для большинства случаев,  поэтому  изменять данные  установки не приходится почти никогда.

Параметр потоковой модели может принимать следующие значения:

•  Single (Одиночная) — все запросы клиентов обрабатываются в отдельном по токе.  Это не самый  лучший выбор, ибо другие запросы должны  ожидать завер шения  обработки запроса первого клиента.

•  Apartment (Раздельная) — запрос каждого  клиента обрабатывается в собствен ном потоке, изолированном от других потоков. (Ни  один  из потоков не имеет доступа  к состоянию другого.)  Данные экземпляра класса  должны  быть  защи щены  объектами синхронизации потоков, в противном случае при  использова нии  глобальных переменных можно  столкнуться с проблемами совместного доступа к данным.  Это наиболее предпочтительная потоковая модель.

•  Free (Свободная) — доступ к экземпляру класса  одновременно могут осуществ лять  многие потоки. Данные экземпляра класса  никак  не  защищены, поэтому необходимо самостоятельно принимать меры  предотвращения проблем мно гопользовательской среды.

•  Both (Комбинированная) — комбинация значений Apartment и Free. В основе этого подхода  лежит  свободная потоковая модель,  за одним исключением: обрат ный вызов  осуществляется в том же потоке. (Таким образом, параметры в функ циях обратного вызова защищены от проблем многопоточной обработки.)

•  Neutral (Нейтральная) — используется, в основном, в условиях  COM+. Объек ты COM применяют преимущественно модель  Apartment. Клиентские запро сы  получают  доступ  к экземплярам объекта в разных потоках, а ответствен ность за предотвращение конфликтов обращений принимает на себя COM. Тем не менее решать проблемы, связанные с использованием глобальных перемен ных (см. главу, посвященную многопоточному режиму), равно  как и проблемы защиты данных  в промежутках между вызовами методов, придется самостоя тельно.

Параметр Instancing предлагает выбор  из трех  вариантов. Обратите внимание: ес ли активный объект сервера зарегистрировать как внутренний сервер процесса (in process), то выбор  этого  параметра не имеет  значения. (Внутренний и внешний сер вера  процесса рассматриваются позднее.) Но  все же необходимо знать,  какие  значе ния может принимать этот параметр:

•  Internal Instance (Внутренний экземпляр) — такой  экземпляр объекта COM

существует только в рамках собственной библиотеки DLL.

•  Single Instance (Единственный  экземпляр) —   приложение  может   иметь только  один клиентский экземпляр.

•    Multiple Instance (Множественные экземпляры) — одно приложение (биб

лиотека ActiveX) может создать более одного  экземпляра объекта COM.

Кроме   того,  в  этом  диалоговом окне  можно  выбрать тип  сервера (Active  Server Type). Он зависит от версии установленного сервера IIS. Для IIS 3 или IIS 4 используют ся такие  методы  событий уровня страницы, как OnStartPage и OnEndPage, в то время как серверы IIS 4 и IIS 5 могут использовать и методы  контекста объекта. Например, для манипулирования данными экземпляра активного объекта сервера можно  применить сервер транзакций Microsoft (MTS — Microsoft Transaction Server) или COM+.

Delphi  6  учитывает  большую  часть   этих  различий,  следовательно, для  данного примера можно  оставить параметр Page-Level Event Methods (Методы событий уров ня  страницы),  устанавливаемый по  умолчанию. Точно так  же  можно  поступить  и в отношении активных объектов сервера, если  выбран параметр Object Context (Контекст объекта). Не  забывайте, что  параметр необходимо выбрать соответствую щий (или,  по крайней мере,  поддерживаемый) установленному Web серверу.

Последний параметр диалогового окна  New Active Server Object используется для создания очень  простых тестовых сценариев HTML  для данного активного объекта сервера. Для  тех,  кто  не знаком  с ASP или  языком сценариев ASP, это  подходящий момент, чтобы  начать их изучение. Пример состоит всего  лишь из двух строк, но их вполне достаточно, чтобы  продемонстрировать вызов  методов созданного активного объекта сервера с помощью  сценария.

Обычно в этом диалоговом окне не приходится изменять ничего, за исключением имени  объекта в поле CoClass Name.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии