Лабораторная работа: Технологія SOAP
function EuroToUk(Value: Currency): Currency; stdcall;
// Конвертація Гривнею в Евро
function UkToEuro(Value: Currency): Currency;
stdcall;
end;
implementation
uses InvokeRegistry;
initialization
InvRegistry.RegisterInterface(TypeInfo(IEncodeDecode));
end.
Зверніть увагу, що рядок ['{9298D805-A2FB-4860-994E-11CC5BD36025}'] – це GUID інтерфейсу. Для коректної роботи прикладу необхідно згенерувати його, а не вводити уручну або копіювати з наведеного тексту. Генерація GUID в RAD Delphi викликається натисненням Ctrl+Shift+G.
У разі використання у функціях інтерфейсу скалярних типів даних генерація SOAP-повідомлень відбувається автоматично без додаткових зусиль з боку програміста. Якщо потрібно використовувати складні типи даних, такі як статичні масиви, набори і класи, то необхідно створити і зареєструвати клас-спадкоємець від TRemotableXS і перевизначити методи XSToNative і NativeToXS . Дані методи конвертують строкове і бінарне представлення даних одне в одне.
Найбільш простим способом реалізації інтерфейсу на сервері є створення і реєстрація в invocation реєстрі класу-спадкоємця від TInvokableClass . Клас TInvokableClass має дві чудові особливості:
· Invocation реєстр знає про те, як створити екземпляр цього класу і його спадкоємців при запиті клієнтом викликів методів інтерфейсу;
· Оскільки клас TInvokableClass є спадкоємцем від TInterfacedObject , то він уміє звільнити пам'ять у разі, коли кількість посилань на нього дорівнює 0, що полегшує програмісту життя.
Текст модуля реалізації представлено далі:
unit u_Impl;
interface
uses InvokeRegistry, u_Intrf;
type
TEncodeDecode = class(TInvokableClass, IEncodeDecode)
protected
function EuroToUk(Value: Currency): Currency; stdcall;
function UkToEuro(Value: Currency): Currency; stdcall;
end;
implementation
{ TEncodeDecode }
function TEncodeDecode.UkToEuro(Value: Currency): Currency;
begin