Delphi 6 і Web-сервіси, HTML, XML, DHTML, Інтернет-технології, статті

У цій статті ми знову повертаємося до вже неодноразово обговорювалася нами темі Web-сервісів, що представляють собою технологію інтеграції Web-додатків. Сьогодні ми розглянемо, як можна використовувати Web-сервіси в Windows-додатках, створених за допомогою Borland Delphi 6, а також як за допомогою цього ж засоби розробки створювати власні Web-сервіси. Зазначимо, що на момент написання даної статті, коли вихід остаточної версії Visual Studio. Net ще тільки очікується в найближчому майбутньому, Delphi 6 є єдиним засобом розробки, що підтримує створення Web-сервісів.


Протягом останніх декількох років ми спостерігаємо якісні зміни, які зазнає World Wide Web. Якщо ще п’ять-сім років тому WWW представляла собою головним чином сукупність серверів, що містять статичні документи з посиланнями один на одного, то сучасний Web практично неможливо уявити без інтерактивних Web-додатків, що обробляють і поміщають в бази даних для користувача введення, динамічно генеруючих сторінки на скриптових мовах по запиту користувача і обслуговуючих таким чином той чи інший бізнес, так само як і без широкого спектру технологій, що реалізують подібну функціональність (CGI, ISAPI, ASP, JSP і т.д.).


Зазначимо, однак, що еволюція WWW не зупинилася на Web-додатках. Взаємна інтеграція бізнесів різних компаній, що відбувається зараз у всьому світі, неминуче тягне за собою появу технологій та стандартів інтеграції обслуговуючих їх додатків і корпоративних інформаційних систем. Найбільш популярною технологією такої інтеграції в даний час слід назвати обмін даними у форматі XML (eXtensible Markup Language) за протоколом SOAP (Simple Object Access Protocol) і створення Web-сервісів, які застосовують подібний обмін даними.

Web-сервіс – це, по суті, об’єкт, який реалізує один або кілька методів, до яких можна звертатися через Internet з будь-якого іншого застосування. Для опису методів, які надаються конкретним Web-сервісом (тобто його програмного інтерфейсу), створюється і робиться доступним спеціальний документ на мові WSDL (Web Service Definition Language), що є підмножиною мови XML. Зазначимо, що для пошуку Web-сервісів в Мережі планується використовувати реєстри UDDI (Universal Description, Diiscovery and Integration), в яких Web-сервіси реєструються їх провайдерами для того, щоб їх могли знайти розробники. Web-сервіси, по суті, дозволяють створювати розподілені додатки, частини яких можуть функціонувати на будь-яких платформах і розташовуватися в довільних місцях, що робить цю технологію досить привабливим засобом інтеграції корпоративних додатків. Більш докладно про стандарти і засоби розробки Web-сервісів можна прочитати в статті Олексія Федорова «Web нового покоління – Web-сервіси» (Див. КомпьютерПресс № 6’2001).

Оскільки Web-сервіси є відносно новою технологією, про підтримку їх застосування і тим більше створення на рівні компонентів, класів або експертів для їх створення в усіх без винятку засобах розробки говорити поки ще рано. Зазначимо, однак, що такі засоби розробки вже є або повинні з’явитися в найближчому майбутньому. Зокрема, створення Web-сервісів підтримується в Delphi 6, випущеної влітку нинішнього року. Нижче ми розглянемо два найпростіших прикладу, що ілюструють можливості застосування та створення Web-сервісів з допомогою цього дуже популярного в нашій країні засоби розробки. Передбачається, що зі створенням додатків за допомогою Delphi читачі вже знайомі.


Використання Web-сервісу в додатку


Для створення клієнтської програми, що використовує готовий Web-сервіс, слід в загальному випадку мати підключення до Internet на час розробки, оскільки в процесі створення такого програми потрібен звернення до WSDL-файлу. У даному прикладі ми скористаємося одним з безкоштовних або shareware-сервісів, посилання на які можна знайти в Web, наприклад на сайті www.xmethods.org/ (Список деяких загальнодоступних Web-сервісів різних виробників на цьому сайті представлений і у вигляді звичайної HTML-сторінки, і як UDDI-інтерфейс і налічує на сьогодні кілька десятків більш- менш корисних Web-сервісів).

Виберемо для створення прикладу Web-сервіс Temperature Converter, розроблений британською компанією Lucin . WSDL-опис цього сервісу знаходиться за адресою sal006.salnetwork.com:83/a1vbcode/temperature/ctemperature.xml.


Для початку запустимо Delphi 6 і створимо проект звичайного Windows-програми. Потім, вибравши з середовища розробки пункт меню File / New / Other, відкриємо репозитарій об’єктів і виберемо в ньому на сторінці Web Services піктограму Web Sertvice Importer.


Далі в рядку WSDL or XML Schema Location (Filename or URL) діалогового вікна Web Services Import слід ввести URL WSDL-файл, що містить опис вибраного нами Web-сервісу – sal006.salnetwork.com:83/a1vbcode/temperature/ctemperature.xml.

Після цього середовище розробки звернеться за вказаною адресою до цього файлу і на його основі згенерує модуль, що містить інтерфейс для активізації Web-сервісу та доступу до його методам (спадкоємець інтерфейсу IInvokable). В даному випадку згенерований код має такий вигляд:


Unit cln2;

Interface

uses Types, XSBuiltIns;

type



Temperature_ctemperaturePortType = interface(IInvokable)



[“{B71C70ED-370D-4FC5-914C-496FFB5BA3ED}”]
function CelsiusToFahrenheit(const Celsius: Double): Double; stdcall;
function FahrenheitToCelsius(const Fahrenheit: Double): Double; stdcall;
function FahrenheitToKelvin(const Fahrenheit: Double): Double; stdcall;
function CelsiusToKelvin(const Celsius: Double): Double; stdcall;
function KelvinToCelsius(const Kelvin: Double): Double; stdcall;
function KelvinToFahrenheit(const Kelvin: Double): Double; stdcall;


end;


implementation
uses InvokeRegistry;

initialization



InvRegistry.RegisterInterface(TypeInfo(Temperature_ctemperaturePortType), “”, “”,””,” Temperature.ctemperaturePortType”);


end.


Як ми бачимо, що використовується Web-сервіс реалізує шість методів, конвертують один в одного різні температурні шкали. Скористаємося одним з них – FahrenheitToCelsius, що переводять значення температури в градусах Фаренгейта у відповідне значення в градусах Цельсія (це улюблена завдання російських громадян, що вивчають прогнози погоди з допомогою американських сайтів). Посилаючись на сгенерірованний модуль з модуля, пов’язаного з головною формою додатка за допомогою пункту меню File / Use Unit.

Далі слід подбати про наявність у додатку об’єкта, що відповідає за вилучену активізацію Web-сервісу і, отже, що зберігає відомості про його місцезнаходження. Для цієї мети в палітрі компонентів на сторінці Web Services є компонент THTTPRIO (RIO означає Remote Invokable Object). Помістимо цей компонент на форму і дамо його властивості WSDLLocation URL WSDL-опису Web-сервісу. Після цього спробуємо встановити значення властивості Service (ця властивість містить список інтерфейсів, що надаються Web-сервісом, – їхні імена вже є в створеному интерфейсном модулі) або властивості Port (Містить ім’я порту, визначеного в WSDL-файлі і встановлює місце розташування Web-сервісу, і протокол, який застосовується для звернення до нього). Середовище розробки знову звернеться до WSDL-опису Web-сервісу, отримавши на його основі відомості про місцезнаходження сервісу і його інтерфейсах. Ось так виглядає фрагмент WSDL-файл, що містить ці відомості:


<port name=”Temperature.ctemperaturePort” binding=”tns:Temperature.ctemperaturebinding”>
<soap:address location=”http://sal006.salnetwork.com:82/bin/converter.cgi” />


Після цієї властивості Service і Port можна буде вибрати з випадаючих списків.


Зауважимо, що в ряді випадків можна не використовувати WSDL-опис, а просто вказати URL Web-сервісу у властивості URL і ввести властивості Service і Port вручну.


Наступним кроком буде створення користувацького інтерфейсу нашого клієнтського додатку. Він нескладний: поле для введення вихідного значення, мітка для виведення результатів і кнопка, натискання на яку ініціює звернення до Web-сервісу.

Обробник події, пов’язаної з натисканням на кнопку, містить код для звернення до Web-сервісу. Він має вигляд:


procedure TForm1.Button1Click(Sender: TObject);
begin



Label1.Caption := ” Degrees Fahrenheit is equal to ” +



FloatToStr((HTTPRIO1 as Temperature_ctemperaturePortType).FahrenheitToCelsius(StrToFloat(Edit1.Text)))
+” Degrees Celsius”;


end;


Тепер можна зберегти проект, скомпілювати програми та протестувати його.


Отже, ми навчилися створювати додатки, що використовують Web-сервіси. У наступному розділі цієї статті ми розглянемо, як створювати самі Web-сервіси.


Створення Web-сервісу


Створити найпростіший Web-сервіс (на зразок того, що ми використовували) за допомогою Delphi 6 ненабагато складніше, ніж створити клієнтську програму. Щоб надмірно не ускладнювати завдання, як приклад створимо дуже примітивний Web-сервіс, який просто примножує два числа. Для тестування Web-сервісу слід мати Web-сервер з доступним каталогом для розміщення виконуваних фалів (і, природно, що працює під управлінням Windows). Для цього потрібно вибрати зі сторінки Web Services репозитарія об’єктів піктограму Soap Server Application і вибрати тип Web-додатка, що ми плануємо створити. Тип Web-додатки залежить від того, яким Web-сервером ми плануємо користуватися і бажаємо виконувати наш Web-сервіс в адресному просторі Web-сервера. Якщо це так, то потрібно створити його у вигляді бібліотеки, а якщо ні, то у вигляді виконуваного файлу (у нашому прикладі ми виберемо цю опцію).

Вибравши тип програми, ми отримаємо об’єкт TWebModule, що містить три компоненти:



Тепер можна приступити до створення опису інтерфейсу Web-сервісу. Для цього просто створимо новий модуль і в ньому опишемо інтерфейс IMult, що містить єдиний метод Multiply:


unit ws2;

interface

uses



InvokeRegistry;


type




IMult = interface(IInvokable)


[“{8823BB66-C67C-483B-B985-529992F5F1F9}”]




function Multiply(Num1: LongInt; Num2: LongInt): Longint; stdcall;


end;


implementation


initialization



InvRegistry.RegisterInterface(TypeInfo(IMult));


end.


Значення GUID для даного сервера можна згенерувати в редакторі коду за допомогою комбінації клавіш Ctrl-Shift-G.


І нарешті, нам слід створити модуль з реалізацією методу Multiply:


unit ws3;
interface
uses



InvokeRegistry, Ws2;


type



TMult = class(TInvokableClass, IMult)



function Multiply(Num1: LongInt; Num2: LongInt): Longint; stdcall;


end;


implementation


function TMult.Multiply(Num1: LongInt; Num2: LongInt): Longint;
begin



Result:=Num1*Num2;


end;

initialization



InvRegistry.RegisterInvokableClass(TMult);


end.


Зберігши і скомпілювавши проект, скопіюємо отримане додаток до каталогу Web-сервера, призначений для зберігання виконуваних файлів (у випадку якщо використовуються Internet Information Services у Windows 2000, відповідним каталогом за замовчуванням буде C: InetpubScripts).

Якщо тепер звернутися з Web-браузера до Web-сервісу з параметром / wsdl – http://MAINDESK/scripts/ws.exe/wsdl, отримаємо список реалізованих їм інтерфейсів. Один з них, IMult, створений нами, інший, IWSDLPublish, реалізований в компоненті TWSDLHTMLPublish.


Натиснувши на посилання, що вказує на інтерфейс IMult, можна отримати WSDL-опис нашого інтерфейсу IMult, яке використовується клієнтським додатком і тому поміщається в доступне місце в Internet. В нашому ж випадку ми просто збережемо його у файлі.

Залишилось протестувати наш Web-сервіс. Зробити це можна різними способами, наприклад звернутися до нього з Web-сторінки, яка містить код на одному з скриптових мов. Однак ми напишемо клієнтську програму на Delphi, якщо ми вже вміємо це робити. Як і в першій частині цієї статті, створимо новий проект, виберемо зі сторінки Web Services репозитарія об’єктів піктограму Web Services Importer і вкажемо в якості параметра WSDL or XML Schema Location (Filename or URL) діалогового вікна Web Services Import шлях до WSDL-файлу, який ми щойно зберегли. Потім пошлемося на згенерований інтерфейсний модуль з модуля, пов’язаного з головною формою клієнтського додатку. Помістимо на форму компонент THTTPRIO, вкажемо як значення його властивості WSDLLocation ім’я того ж WSDL-файл, виберемо з випадаючих списків значення властивостей Service і Port і створимо найпростіший інтерфейс користувача програми.

Обробник події, пов’язаної з натисканням на кнопку, має вигляд:


procedure TForm1.Button1Click(Sender: TObject);



var M: IMult;


begin




M:=HTTPRIO1 as IMult;
Label1.Caption := “= ” +
IntToStr(M.Multiply(StrToInt(Edit1.Text),StrToInt(Edit2.Text)));


end;


Запустивши клієнтське додаток, можемо переконатися, що наш Web-сервіс цілком працездатний.


Отже, ми навчилися створювати свої Web-сервіси за допомогою Delphi 6 і тестувати їх.


Висновок


У цій статті ми розглянули створення за допомогою Delphi 6 додатків, що використовують Web-сервіси, а також створення самих Web-сервісів і переконалися, що це не надто складно. У реальному житті, напевно, не варто створювати Web-сервіс, перемножуються два числа, – існує багато інших, набагато більш цікавих завдань, вирішення яких варто реалізувати у вигляді Web-сервісу. Здається, вони не змусять себе чекати.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*