Статьи

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


Новости

Как создать фото из видео
Кризис заставляет искать дополнительные источники дохода. Одним из таких источников может стать торговля на валютном рынке Форекс. Но чтобы не потерять свои деньги необходимо работать с надежным брокером.

Как оформить группу в вконтакте видео
Дано хотел свой магазин в вк, но не знал с чего начать его делать. Так как хотелось не банальный магазин с кучей ссылок и фото, а красиво оформленный. С меню, с аватаркой. После просмотра видео создал