Com-сервери та інтерфейси. Класифікація 2005 Зміст


НазваCom-сервери та інтерфейси. Класифікація 2005 Зміст
Дата конвертації30.04.2013
Розмір445 b.
ТипПрезентации


COM-сервери та інтерфейси. Класифікація

  • 2005


Зміст

  • Класифікація COM-серверів:

    • внутрішній сервер (in-process server);
    • зовнішній або локальний сервер (out-of-process server або local server);
    • віддалений сервер (remote server).
  • Маршалінг. Повноважні представники проксі (proxies) та стаби (stubs).

  • Стандартний маршалер COM.

  • Класифікація зв'язувань з сервером автоматизації:

    • пізнє (з використанням змінних типу variant);
    • раннє (interface-зв'язування);
    • dispinterface-зв'язування.
  • Класифікація інтерфейсів COM-серверів:

    • дуальні;
    • IDispatch-інтерфейси;
    • IUnknown-інтерфейси.


Класифікація COM-серверів

  • COM забезпечує прозорість доступу та прозорість місця розташування. Проте доступ до інтерфейсних методів та забезпечення їх виконання може вимагати різних засобів (механізмів) COM, залежно від того, де сервер розташований.

  • Можливі варіанти відповідають наступній класифікації серверів:

    • Внутрішній сервер (in-process server)
    • Зовнішній або локальний сервер (out-of-process server або local server)
    • Віддалений сервер (remote server)


Внутрішній сервер

  • Внутрішній сервер (in-process server) це спеціальна (не кожна – ActiveX Library) бібліотека DLL, яка запускається (функцією Win32 API LoadLibrary) в тому ж процесі, що і клієнт, а отже у цьому випадку використовується єдиний і для клієнта, і для сервера адресний простір – значення вказівника на інтерфейс є безпосередньо доступним клієнту.

  • Таким чином, клієнт взаємодіє з in-process сервером, використовуючи прямі виклики (у тому ж адресному просторі) до інтерфейсу COM. (Проте, при помилці у сервері може “вилетіти” весь процес, тобто й клієнт).



Зовнішній та віддалений сервери



Роль повноважних представників (proxies)



Маршалінг та демаршалінг

  • Подібна технологія з використанням proxy та marshalling packet є традиційною при здійсненні викликів віддалених процедур (RPC Remote Procedure Calls).

  • (Обмеження: типи, сумісні з RPC-маршалінгом).

  • LRPC (Lightweight Remote Procedure Call) – тип міжпроцесного зв'язку, який є, по суті, спеціальним випадком RPC.



До створення proxies (Midl.exe F.idl)



Стандартний маршалінг автоматизації

  • У багатьох випадках при розробці серверів автоматизації можна не перейматися проблемами маршалінгу, покладаючись на так званий стандартний маршалінг автоматизації (зі стандартними proxy).

  • Зокрема, майстер Delphi генерує модулі для підтримки об'єктів автоматизації з орієнтацією саме на використання стандартного маршалінгу.

  • Але поруч з плюсами є й мінуси – обмеження на типи, що можуть використовуватись інтерфейсними методами (по суті, треба враховувати два обмеження: типи, що підтримуються маршалінгом RPC та типи, сумісні з автоматизацією).

  • Загалом, майстер обмежується такими типами Delphi: Smallint, Integer, Single, Double, Currency, TDateTime, WideString, IDispatch, SCODE, WordBool, OleVariant, IUnknown, Byte.

  • Зауважимо, тип String відсутній.



Стандартний маршалер автоматизації oleaut32.dll (бібліотека COM)



oleaut32.dll стандартний маршалер автоматизації

  • IOutConv = interface(IDispatch)

  • ['{19A5F624-FFFB-11D7-A3E5-444553540000}']

  • function Conv(USD: Double): Double; safecall;

  • end;



Класифікація зв'язувань з сервером автоматизації

  • Класифікація зв'язувань:

    • пізнє (з використанням змінних типу variant);
    • раннє (interface-зв'язування);
    • dispinterface-зв'язування.


Пізнє зв'язування

  • var V:variant;

  • . . .

  • V:= CreateOleObject('Pr_Dlg.Conv_Dlg');

  • V.Method(. . .);

  • V.Abracadabra(1, ‘будь-що’);

  • // компіляція успішна!!

  • 1) GetIdsOfNames(...) // “Method” ---> dispid

  • рядок ---> число

  • 2) Підготовка структури типу TDispParams з параметрами

  • 3) Invoke(dispid, … , DispParams, … )



GetIdsOfNames, Invoke та IDispatch



Інтерфейс IMy, успадкований від IDispatch



Інтерфейс IMy та його реалізація



Пізнє зв'язування (інтерфейс IMy)



Раннє зв'язування

  • друге, транслюється безпосередньо у виклик підпрограми, що реалізує цей метод (без звертань до методів GetIdsOfNames та Invoke, використовуючи угоду про вказівники на інтерфейси, тобто структуру пам'яті з таблицею методів).



Раннє зв'язування (інтерфейс IMy)



PrDLLConv_TLB.pas

  • сonst { Component class GUIDs } Class_DLLConv: TGUID =

  • '{19A5F622-FFFB-11D7-A3E5-444553540000}';

  • type { Forward declarations: Interfaces }

  • IDLLConv = interface;

  • IDLLConvDisp = dispinterface;

  • { Forward declarations: CoClasses }

  • DLLConv = IDLLConv;

  • { Dispatch interface for DLLConv Object }

  • IDLLConv = interface(IDispatch)

  • ['{19A5F621-FFFB-11D7-A3E5-444553540000}']

  • function Conv(USD: Double): Double; safecall;

  • end;

  • { DispInterface declaration for Dual Interface IDLLConv }

  • IDLLConvDisp = dispinterface

  • ['{19A5F621-FFFB-11D7-A3E5-444553540000}']

  • function Conv(USD: Double): Double; dispid 1;

  • end;

  • { DLLConvObject }

  • CoDLLConv = class

  • class function Create: IDLLConv;

  • class function CreateRemote(const MachineName: string):

  • IDLLConv;

  • end;



Диспінтерфейс (dispinterface) та dispinterface-зв'язування

  • Вимоги до dispinterface-зв'язування схожі на випадок раннього зв'язування: контролеру автоматизації повинен бути відомим опис диспінтерфейсу (наприклад, в результаті імпортування бібліотеки типу). А трансляція оператора dispinterface-зв'язування схожа на випадок пізнього зв'язування, тільки тут здійснюється “економія” на кроці з використанням GetIdsOfNames – dispid є відомим на фазі компіляції.

  • Фрагмент з PrDLLConv_TLB.pas:

  • { DispInterface declaration for Dual Interface

  • IDLLConv }

  • IDLLConvDisp = dispinterface

  • ['{19A5F621-FFFB-11D7-A3E5-444553540000}']

  • function Conv(USD: Double): Double; dispid 1;

  • end;



Диспінтерфейс (dispinterface) та dispinterface-зв'язування

  • Використання dispinterface-зв'язування (фрагмент клієнтської програми):

  • var DispInterf: IDLLConvDisp;

  • ...

  • DispInterf := CreateOleObject('PrDLLConv.DLLConv') as

  • IDLLConvDisp;

  • Res:=DispInterf.Conv(Temp);

  • -----------------------------------------------------

  • WMethodName: WideString;

  • PMethodName: PWideChar;

  • ClassID: TGUID;

  • ...

  • ClassID := ProgIDToClassID('PrDLLConv.DLLConv');

  • WMethodName := 'Conv';

  • PMethodName := PWideChar(WMethodName);

  • ??? OLECHECK(DispInterf.GetIDsOfNames(ClassID,

  • @PMethodName, 1, 0,@DispID));//переривання!



Диспідентифікатори (dispid)



Варіанти зв'язувань з сервером автоматизації. Приклад

  • var V:variant;

  • ...

  • V:= CreateOleObject('PrDLLConv.DLLConv');

  • Res:=V.Conv(Temp);

  • var Interf: IDLLConv;

  • ...

  • Interf := CreateOleObject('PrDLLConv.DLLConv') as IDLLConv;

  • Res:=Interf.Conv(Temp);

  • var DispInterf: IDLLConvDisp;

  • ...

  • DispInterf := CreateOleObject('PrDLLConv.DLLConv') as

  • IDLLConvDisp;

  • Res:=DispInterf.Conv(Temp);



Варіанти зв'язувань з сервером автоматизації. Порівняння

  • Внутрішній сервер:

  • Зовнішній сервер:



Варіанти зв'язувань з внутрішнім сервером автоматизації. Порівняння

  • Домінують витрати на реалізацію циклу!



Класифікація інтерфейсів COM-серверів



Класифікація інтерфейсів COM-серверів

  • Класифікація інтерфейсів COM-серверів:

  • а) дуальні інтерфейси;

  • б) IDispatch-інтерфейси (наприклад, MS Word, MS Excel тощо);

  • в) IUnknown-інтерфейси. а) б) в)



Додаток



Зовнішній сервер: proxy-об'єкти, маршалінг

  • Отже, в обох адресних просторах створюються proxy-об'єкти:

    • "stub"("заглушка") – представник клієнта в адресному просторі сервера (зокрема, саме він має справу з реальним вказівником на інтерфейс);
    • "proxy" – представник сервера в адресному просторі клієнта.


Віддалений сервер

  • Віддалений сервер (remote server) – це програмний додаток, що виконується на іншій (віддаленій) машині в мережі (використовується термін distributed COM – розподілений COM, DCOM).

  • У цьому випадку при створенні COM-об'єкту бібліотека COM звертається до менеджера управління сервісами SCM. SCM клієнтської машини делегує виконання цієї задачі SCM віддаленої машини.



Віддалений сервер



NDR та OBJREF (object reference) DCOM

  • Для забезпечення взаємодії машин (можливо з різними форматами даних!) виконується маршалінг параметрів виклику ORPC (Object RPC) з використанням мережного формату NDR (Network Data Representation) зі стандарту DCE (Distributed Computing Environment) RPC. Однак вказівники на інтерфейси не мають підтримки з боку NDR, то ж як вони передаються?

  • 1) Якщо вказівник на інтерфейс посилається на об'єкт у тому ж процесі, проблем не виникає: вказівник передається, як є.

  • 2) Якщо вказівник на інтерфейс посилається на об'єкт в іншому процесі на тій же машині, то передається вказівник відповідного процесу.

  • 3) Якщо ж вказівник на інтерфейс посилається на об'єкт, розташований на іншій машині, то передається конструкція OBJREF (object reference).



Структура OBJREF та рядок зв'язування (string binding)

  • Відповідно до протоколу DCOM до складу OBJREF входять:

    • OXID (8-байтовий ідентифікатор експортера об'єктів – Object Exporter Identifier);
    • GUID інтерфейса;
    • GUID об'єкта;
    • рядок зв'язування (string binding) вирішувача OXID на машині, де виконується об'єкт.
  • Кожен вирішувач OXID підтримує таблицю OXID-ідентифікаторів з їх рядками зв'язувань – string binding, що містять, зокрема, IP-адресу, протокол, порт.

  • Саме рядок зв'язування string binding з об'єктом клієнт повинен отримати перш робити виклики ORPC. (Складно, але забезпечується гнучкість при роботі з різними мережевими протоколами).



Remote Procedure Calls (RPC)

  • RPC (початок 80-х, Sun Microsystems) – частина стандарту Середовища Розподілених Обчислень (Distributed Computing Environment DCE), прообраз ОО проміжного шару (middleware):

    • IDL (одна і та сама абревіатура в RPC, COM, CORBA!);
    • UDP (User Datagram Protocol), TCP (Transmission Control Protocol);
    • RPCGEN (Unix RPC) генерує обидва proxy (клієнтський та серверний).
  • Microsoft : MS RPC, MS IDL (MS MIDL).



Реєстр. HKEY_CLASSES_ROOT\



Реєстр. HKEY_CLASSES_ROOT\CLSID\



Реєстр. HKEY_CLASSES_ROOT\Interface\



Реєстр. HKEY_CLASSES_ROOT\TypeLib\



Реєстр. HKEY_LOKAL_MACHINE\SOFTWARE\Classes\













Внутрішні та зовнішні сервери: порівняння модулей автоматизації



Dispinterface (IDL)



Dispinterface (IDL)



Сумісність з автоматизацією IDL-типів



Схожі:

Com-сервери та інтерфейси. Класифікація 2005 Зміст iconCom-сервери та інтерфейси. Класифікація 2007 Зміст
Проте доступ до інтерфейсних методів та забезпечення їх виконання може вимагати використання різних
Com-сервери та інтерфейси. Класифікація 2005 Зміст iconCom-сервери та інтерфейси. Класифікація 2007 Зміст
Проте доступ до інтерфейсних методів та забезпечення їх виконання може вимагати використання різних
Com-сервери та інтерфейси. Класифікація 2005 Зміст iconCom-сервери та інтерфейси. Класифікація 2003-2009 Зміст
Проте доступ до інтерфейсних методів та забезпечення їх виконання може вимагати використання різних
Com-сервери та інтерфейси. Класифікація 2005 Зміст icon?? www ?? Глобальна мережа Internet
Сервери здатні зберігати та надсилати інформації за запитами інших компютерів, водночас відповідаючи на дасятки або сотні запитів....
Com-сервери та інтерфейси. Класифікація 2005 Зміст iconТема: Мережеві архітектури. Вивчення протоколів. Мережеві підключення
Клієнти – це робочі станції, які використовують ресурси сервера і надають зручні інтерфейси користувачам. Інтерфейси користувача...
Com-сервери та інтерфейси. Класифікація 2005 Зміст iconТехнологія corba. Вступ 2005 Зміст

Com-сервери та інтерфейси. Класифікація 2005 Зміст iconСтворення та використання corba-об'єктів 2005 Зміст

Com-сервери та інтерфейси. Класифікація 2005 Зміст iconСтандартні угоди com. Створення com-об’єктів 2005 Зміст

Com-сервери та інтерфейси. Класифікація 2005 Зміст iconCorba об'єктні адаптери. Portable Object Adapter (poa) 2005 Зміст

Com-сервери та інтерфейси. Класифікація 2005 Зміст iconСтандартні угоди в com. Класифікація com-серверів 2003 Зміст


Додайте кнопку на своєму сайті:
dok.znaimo.com.ua


База даних захищена авторським правом ©dok.znaimo.com.ua 2013
звернутися до адміністрації
dok.znaimo.com.ua
Головна сторінка