- •Розподілені системи обробки інформації
- •Передмова
- •Розділ 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.9. Зовнішній сервер автоматизації
2.9.1. Основні визначення
Зовнішній сервер автоматизації являє собою окремий застосунок (для виконання якого будується окремий процес), до складу якого включено СОМ-об’єкт автоматизації.
Для використання зовнішніх СОМ-серверів необхідна наявність механізму маршалінгу даних. З автоматизацією сумісні наступні типи даних: Smallint, Integer, Single, Double, Currency, TDateTime, WideString, IDispatch, SCODE, WordBool, OleVariant, IUnknown, Shortint. Delphi забезпечує також підтримку маршалінгу зображень, наборів рядків і шрифтів за допомогою спеціальних інтерфейсів IPicture, IStrings і IFont. Використання зовнішніх серверів автоматизації доцільно в тих випадках, коли сервер повинен працювати як автономний застосунок зі своїми власними правами. Віддалений доступ, тобто доступ від клієнта, який виконується на іншому комп'ютері, можливий тільки в разі використанням зовнішнього сервера автоматизації.
Угода про безпечне викликання. Всі методи сервера автоматизації повинні повертати значення типу HResult. Значення, що повертається, є індикатором нормального завершення методу, тобто успішного виконання запрограмованої в ньому операції. Інші дані користувача, отримані в результаті роботи функції, повертаються через її параметри методу з модифікатором out. Середовище Delphi бере на себе вирішення деяких складнощів роботи із СОМ. Як правило, визначення методу інтерфейсу автоматизації має такий вигляд:
function ім'я_методу(<список вхідних параметрів>; out <список вихідних параметрів>): HResult; stdcall;
Наприклад:
function Convert(Quantity: Double; InUnit: Integer; OutUnit: Integer; out Result Double): HResult; stdcall;
Дотримання угоди про безпеку виклику дозволяє при розробці програми користувача звертатися до методу так, ніби його оголошення виглядало в іншій спосіб, а саме:
function Convert(Quantity: Double; InUnit: Integer; OutUnit: Integer): Double; safecall;
Директива safecall на стороні сервера СОМ-застосунка примушує Delphi автоматично створити навколо всіх методів свого роду оболонку у вигляді конструкції try – except. Припустимо, наприклад, розроблювач включив у сервер автоматизації такий метод:
Function TМyServer.DoSometsing:integer;
Begin
Result := SomefunctionThatReturnInteger;
end;
При компіляції Delphi створить об'єктний код, такий, начебто текст програми виглядав наступним чином:
function TMyServer.DoSpmething(out Ret: Integer): HResult;
begin
try
Ret := SomeFunctionThatReturnInteger;
Result := S_OK;
except
Result := E_UNEXPECTED;
end;
end;
Іншими словами, Delphi бере на себе турботи про те, щоб при виникненні виключення в процесі виконання сервером деякої функції, його обробка була передана застосунку-клієнту через значення типу HResult.
На стороні клієнта директива safecall приводить до того, що програма аналізує значення, що повертається, щоб з'ясувати, чи виконаний її запит та генерує виключення, якщо з'ясовується, що отримано код помилки.
Зверніть увагу на те, що сервер автоматизації може і не мати інтерфейсу з користувачем. У нього може бути сховане головне вікно або воно може бути навіть відсутнім зовсім. Якщо виникне виключення, у сервера в такому випадку немає ніякого способу сповістити про нього кінцевого користувача. Сервер може міститися навіть на іншому комп'ютері, ніж той, на якому працює застосунок-клієнт. Зрозуміло, що в цьому випадку, якщо не буде задіяний описаний вище механізм повернення виключення клієнту, останній ніколи не довідається, чому його програма не працює.