Статьи

Delphi 6 і Web-сервіси

  1. Використання Web-сервісу в додатку
  2. Створення Web-сервісу
  3. висновок

Наталія Єлманова

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

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

висновок

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

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

Відзначимо, однак, що еволюція 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-сервіс - це, по суті, об'єкт, який реалізує один або кілька методів, до яких можна звертатися через Internet з будь-якого іншого застосування

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

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

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

Виберемо для створення прикладу Web-сервіс Temperature Converter, розроблений британською компанією Lucin (). WSDL-опис цього сервісу знаходиться за адресою.

Для початку запустимо 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-сервісу -. Далі в рядку WSDL or XML Schema Location (Filename or URL) діалогового вікна Web Services Import слід ввести URL WSDL-файлу, що містить опис обраного нами Web-сервісу -

Після цього середовище розробки звернеться за вказаною адресою до цього файлу і на його основі згенерує модуль, що містить інтерфейс для активізації 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-сервісу і, отже, зберігає відомості про його місцезнаходження. Для цієї мети в палітрі компонентів на сторінці 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-сервера. Якщо це так, то потрібно створити його у вигляді бібліотеки, а якщо немає, то у вигляді виконуваного файлу (в нашому прикладі ми виберемо цю опцію). Створити найпростіший Web-сервіс (на зразок того, що ми використовували) за допомогою Delphi 6 ненабагато важче, ніж створити клієнтську програму

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

  • THTTPSoapDispatcher, що відповідає за отримання запитів за допомогою протоколу SOAP;
  • THTTPSoapPascalInvoker, що відповідає за перетворення цих запитів в виклики методів об'єктів нашого застосування;
  • TWSDLHTMLPublish, що відповідає за генерацію WSDL-файлів, що містять опис реалізованих в Web-сервісі інтерфейсів, призначене для розробників клієнтських додатків для даного Web-сервісу.

Тепер можна приступити до створення опису інтерфейсу 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: \ Inetpub \ Scripts). Зберігши і скомпілювавши проект, скопіюємо отримане додаток в каталог Web-сервера, призначений для зберігання виконуваних файлів (в разі якщо використовуються Internet Information Services в Windows 2000, відповідним каталогом за замовчуванням буде C: \ Inetpub \ Scripts)

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

Натиснувши на посилання, що вказує на інтерфейс IMult, можна отримати WSDL-опис нашого інтерфейсу IMult, яке використовується клієнтським додатком і тому поміщається в доступне місце в Internet. У нашому ж випадку ми просто збережемо його у файлі. Натиснувши на посилання, що вказує на інтерфейс 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 і створимо найпростіший призначений для користувача інтерфейс програми. Залишилося протестувати наш Web-сервіс

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

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

висновок

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

КомпьютерПресс 11'2001


Новости