- •Розподілені системи обробки інформації
- •Передмова
- •Розділ 1. Огляд компонентних технологій створення розподілених програмних систем
- •1.1. Узагальнена архітектура і механізм функціонування об'єктних розподілених систем
- •1.2. Основні приклади технологій створення розподілених систем
- •1.3. Переваги використання розподілених технологій
- •Розділ 2. Розроблення розподілених систем на основі модели com/dcom у Delphi
- •2.1. Використання dll у Delphi
- •2.1.1. Поняття dll
- •2.1.2. Створення dll у середовищі Delphi (експорт)
- •2.1.3. Використання dll у Delphi (імпорт)
- •2.1.4. Створення динамічних бібліотек для редагування ресурсів
- •2.2. Основи сом-технології
- •2.2.1. Загальний опис
- •2.2.2. Базові поняття
- •2.2.3. Бібліотека сом
- •2.2.4. Бібліотека типів
- •2.3.2. Сервер сом у Delphi
- •2.3.3. Бібліотека типів у delphі
- •2.4. Створення системи клієнт-сервер на основі базового com-об’єкту у складі внутрішнього сервера
- •2.4.1. Створення сом-сервера
- •2.4.2. Створення сом-клієнта
- •2.4.3. Використання сом-об’єкту в клієнтській програмі
- •2.5. Механізм міжпроцесного обміну
- •2.6. Створення систем клієнт-сервер на основі зовнішнього базового сом-об’єкту
- •2.6.1. Основні поняття
- •2.6.2. Засоби організації потокової взаємодії клієнта і сервера
- •2.6.3. Методи формування екземпляра сом-об’єкту
- •2.6.4. Формування екземпляра зовнішнього сом-об’єкту
- •2.6.5. Створення сом-сервера
- •2.6.6. Створення сом-клієнта
- •2.7. Автоматизація
- •Створення сервера автоматизації;
- •2.7.1. Базові поняття
- •2.7.2. Сервер автоматизації
- •2.7.3. Контролер автоматизації
- •2.8. Створення системи клієнт-сервер на основі внутрішнього сервера автоматизації
- •2.8.1. Об'єкт автоматизації. Клас tAutoObject
- •2.8.2. Вбудований сервер автоматизації
- •2.8.3. Створення клієнта автоматизації
- •2.9. Зовнішній сервер автоматизації
- •2.9.1. Основні визначення
- •2.9.2. Виконання маршалінгу з рядками, шрифтами і зображеннями
- •2.9.3. Перетворення наявного застосунка в сом-сервер автоматизації
- •2.9.4. Створення клієнта автоматизації
- •2.10. Події в сом і зворотні виклики на основі інтерфейсів диспетчирування
- •2.10.1. Створення сервера автоматизації
- •3. Формування бібліотеки типів
- •4. Формування методів
- •5. Реєстрація сервера
- •2.10.2. Створення клієнтського застосунка
- •2.10.3. Підключення множини клієнтів до сервера
- •2.11. Інтерфейси зі зворотним викликом
- •2.11.1. Створення сервера
- •2.11.2. Створення клієнтського застосунка
- •2.12. Технологія ActiveХ
- •2.12.1. Використання готових елементів АctiveХ
- •2.12.2. Розроблення власних елементів АctiveХ
- •2.12.3. Поширення елементів керування ActiveХ і форм ActiveХForm у Web-середовище
- •2.14. Dcom технологія
- •2.14.1. Загальна схема взаємодії сом-клієнта і сом-сервера
- •2.14.2. Розроблення системи «клієнт-віддалений сом-сервер»
- •Розділ 3. Проектування розподілених систем на платформі Microsoft .Net
- •3.1.1. Здійсненя викликань з типів .Net до типів сом
- •3.1.2. Звернення клієнта сом до збірки .Net
- •3.2. Об’єктно-орієнтована архітектура .Net Remotіng – основа створення розподілених систем Mіcrosoft .Net.
- •3.2.1. Створення системи клієнт-сервер на основі технології Remoting
- •Розділ 4. Створення системи "клієнт - сервер" на основі технології corba
- •4.1. Загальні теоретичні відомості
- •4.2. Створення серверного застосунка
- •1. Створення файла опису інтерфейсу
- •Викликання конструктора створення corba сервера
- •Формуємо модуль Unit1
- •Формуємо реалізацію методу
- •4.3. Створення клієнтського застосунка
- •Викликання конструктора corba-клієнта
- •2. Формування форми
- •3. Запуск застосунка
- •Приклад програмних кодів сервера
- •4.4. Порівняльний аналіз технологій сом і соrва
- •4.4.1. Основні принципи об'єктних моделей
- •4.4.2. Об'єктні моделі
- •4.4.3. Підтримка операційних систем
- •4.4.4. Формальний опис архітектури і проблеми реалізації
- •4.4.5. Підсумки порівняння
- •Літературні джерела
2.8. Створення системи клієнт-сервер на основі внутрішнього сервера автоматизації
2.8.1. Об'єкт автоматизації. Клас tAutoObject
Для забезпечення роботи інтерфейсу IDispatch і створення серверів автоматизації використовується клас TAutoObject, який є нащадком класів TCOMObject і TTypedCOMMbject.
Для створення нового об’єкту автоматизації використовується репозитарій. Активізація значка Automation Object на сторінці ActiveX виводить вікно майстра створення об’єкту автоматизації.
Поле Class Name використовується для задання імен базового інтерфейсу та СОМ-класу. Список Threading Model визначає варіант багатопотокової роботи сервера. Прапорець Generate event support code забезпечує підтримку подій у СОМ-сервері. Одночасно з об'єктом автоматизації створюється фабрика класу і бібліотека типів. Для роботи з бібліотекою типів існує спеціальний редактор, який завантажується одразу після введення вказаних вище параметрів у вікні Візарда і натисканні кнопки ОК. Опис бібліотеки типів створюється в нотації Object Pascal.
2.8.2. Вбудований сервер автоматизації
Термін "вбудований" означає що застосунок-сервер використовує той самий адресний простір у пам'яті, що й застосунок-клієнт.
Технологію створення системи клієнт-сервер розглянемо на прикладі створення сервера перетворення одиниць виміру.
Сервер автоматизації, створенння якого буде розглянуто, призначений для перерахування величин площ з одних одиниць вимірів в інші. Використовуються наступні одиниці — квадратні метри, сантиметри, ярди, фути, дюйми, кілометри, милі й акри. Метод Convert, що власне і відповідає за перерахування, оголошений у такий спосіб:
function Convert(Quantity: Double; InUnit: Integer; OutUnit: Integer): Double; safecall;
Значення параметра InUnit визначає одиниці виміру, значення яких необхідно перерахувати, a OutUnit — одиниці виміру результату. Фрагмент програмного коду, у якому виконується перерахування, виглядає так:
const
auSquareMeters = $00000000;
auSquareCentimeters = $00000001;
auSquareYards = $00000002;
auSquareFeet = $00000003;
auSquarelnches = $00000004;
auSquareKilometers = $00000005;
auSquareMiles = $00000006;
auAcres = $00000007;
function TAreaUnitConverter.Convert(Quantity: Double, InUnit, OutUnit: Integer): Double;
const
AreaFactor: Array[auSquareMeters..auAcres] of Double = (10000.0, 1.0, 8361.2736, 929.0304, 6.4516, 10000000000.0, 25899881103.4, 40468726.0987);
begin
Result := Quantity * AreaFactor [InUnit] / AreaFactor [OutUnit];
end;
У масиві AreaFactor зберігаються коефіцієнти перерахування між значенням площі, вираженим у заданих одиницях виміру, і тією самою площею, вираженою в квадратних сантиметрах. Наприклад, 1 квадратний метр – це 10000 квадратних сантиметрів, а 1 акр дорівнює 40468726.0987 квадратних сантиметрів. Функція Convert спочатку перераховує одиниці виміру, задані через InUnit, у квадратні сантиметри, а потім квадратні сантиметри в одиниці, задані через OutUnit.
Створення сервера автоматизації. Для створення сервера автоматизації, що надасть клієнту необхідні функції, необхідно виконати певну послідовність дій.
-
Виберіть у меню Delphi команду FileNew, а потім, коли відкриється діалогове вікно New Items (Нові елементи), виберіть у ньому вкладку ActiveX. Після цього двічі клацніть на елементі ActiveX Library (Бібліотека ActiveX) або клацніть на ньому, а потім на кнопці OK.
-
Знову виберіть у меню команду FileNew, активізуйте піктограму Automation Objects на вкладці ActiveХ. Delphi виведе на екран діалогове вікно майстра Automation Object Wizard.
-
У поле Class Name (Ім'я класу) введіть AreaUnitConverter і активізуйте кнопку OK. У відповідь Delphi сформує модуль для цього класу і бібліотеку типів. На екран автоматично буде виведене вікно Type Library Editor.
-
Виділіть елемент IAreaUnitConverter у списку об'єктів. На інформаційній панелі вікна з'явиться інформація про інтерфейс IAreaUnitConverter, з якої видно, що він є нащадком IDispatch. Нам уже відоме призначення методу Convert, тому додамо його в інтерфейс.
-
Активізуйте кнопку New Method панелі інструментів і назвіть новий метод Convert. Зверніть увагу на інформаційну панель, де автоматично буде привласнене значення 1 числовому ідентифікатору цього методу.
-
Активізуйте вкладку Parameters і встановіть у поле Return Type тип значення, що повертається, як Double. Додайте параметри — Quantity типу Double, InUnit типу Integer і OutUnit типу Integer.
-
Тепер додамо перерахування констант, які визначають поточні і цільові одиниці виміру площі. Натисніть на кнопку New Enumeration панелі інструментів. У відповідь Delphi сформує нове перерахування, якому треба присвоїти ім'я AreaUnit. Натисніть на кнопку New Constant і додайте в перерахування константу auSquareMeters. Так само додайте константи auSquareCentimeters, auSquareYards, auSquareFeet, auSquareInches, auSquareKilometers, auSquareMiles і auAcres. У міру того, як ви будете додавати константи, Delphi автоматично буде присвоювати їм послідовні значення, почавши з 0 для auSquareMeters.
-
Натисніть на кнопку Refresh Implementation (Обновити реалізацію) панелі інструментів, щоб гарантувати генерування програмного коду відповідно до виконаних у вікні Type Library Editor маніпуляцій. Тепер редактор Type Library Editor можна закрити.
-
Збережіть модуль під ім'ям AreaUnit.pas, а проект — під ім'ям UnitSrv.dpr. Виведіть на екран програмний код методу Convert, реалізація якого міститься у модулі AreaUnit.pas. Він повинен виглядати так, як було показано вище.
На цьому створення внутрішнього сервера автоматизації закінчено. Скомпілюйте його, щоб переконатися, що у процесі створення не було зроблено жодних помилок. У підсумку буде створено файл UnitSrv.dll, що власне і є внутрішнім сервером автоматизації, а також файл бібліотеки типів UnitSrv.tlb та опис бібіліотеки типів мовою ObjectPascal (UnitSrv_TLB.pas). Потім виберіть у головному меню Delphi команду Run Register Active Server, щоб зареєструвати сервер у системному реєстрі Windows.