У цій статті ми знову повертаємося до вже неодноразово обговорювалася нами темі Web-сервісів, які представляють собою технологію інтеграції Web-додатків. Сьогодні ми розглянемо, як можна використовувати Web-сервіси в Windows-додатках, створених за допомогою Borland Delphi 6, а також як за допомогою цього ж кошти розробки створювати власні Web-сервіси. Відзначимо, що на момент написання даної статті, коли вихід остаточної версії Visual Studio .Net ще тільки очікується в найближчому майбутньому, Delphi 6 є єдиним засобом розробки, що підтримує створення Web-сервісів.
Відзначимо, однак, що еволюція WWW не зупинилася на Web-додатках. Взаємна інтеграція бізнесів різних компаній, що відбувається зараз у всьому світі, неминуче тягне за собою появу технологій і стандартів інтеграції обслуговуючих їх додатків і корпоративних інформаційних систем. Найбільш популярною технологією такої інтеграції в даний час слід назвати обмін даними в форматі XML (eXtensible Markup Language) по протоколу SOAP (Simple Object Access Protocol) і створення Web-сервісів, які застосовують подібний обмін даними.
Оскільки Web-сервіси є відносно новою технологією, про підтримку їх застосування і тим більше створення на рівні компонентів, класів або експертів для їх створення в усіх без винятку засобах розробки говорити поки ще рано. Відзначимо, однак, що такі засоби розробки вже є або повинні з'явитися в найближчому майбутньому. Зокрема, створення Web-сервісів підтримується в Delphi 6, випущеної влітку нинішнього року. Нижче ми розглянемо два найпростіших прикладу, що ілюструють можливості застосування і створення Web-сервісів за допомогою цього дуже популярного в нашій країні кошти розробки. Передбачається, що з створенням додатків за допомогою Delphi читачі вже знайомі.
Використання Web-сервісу в додатку
Для початку запустимо Delphi 6 і створимо проект звичайного Windows-програми. Потім, вибравши з середовища розробки пункт меню File | New | Other, відкриємо репозитарій об'єктів і виберемо в ньому на сторінці Web Services піктограму Web Sertvice Importer.
Як ми бачимо, що використовується 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-файлу, що містить ці відомості:
[An error occurred while processing this directive]
Після цього властивості Service і Port можна буде вибрати з випадаючих списків.
Зауважимо, що в ряді випадків можна не використовувати WSDL-опис, а просто вказати URL Web-сервісу в властивості URL і ввести властивості Service і Port вручну.
Наступним кроком буде створення призначеного для користувача інтерфейсу нашого клієнтського додатку. Він нескладний: поле для введення вихідного значення, мітка для виведення результатів і кнопка, натискання на яку ініціює звернення до Web-сервісу.
Обробник події, пов'язаного з натисканням на кнопку, містить код для звернення до Web-сервісу. Він має вигляд:
Тепер можна зберегти проект, скомпілювати додаток і протестувати його.
Отже, ми навчилися створювати додатки, що використовують Web-сервіси. У наступному розділі даної статті ми розглянемо, як створювати самі Web-сервіси.
Вибравши тип програми, ми отримаємо об'єкт TWebModule, що містить три компоненти:
- THTTPSoapDispatcher, що відповідає за отримання запитів за допомогою протоколу SOAP;
- THTTPSoapPascalInvoker, що відповідає за перетворення цих запитів в виклики методів об'єктів нашого застосування;
- TWSDLHTMLPublish, що відповідає за генерацію WSDL-файлів, що містять опис реалізованих в Web-сервісі інтерфейсів, призначене для розробників клієнтських додатків для даного Web-сервісу.
Тепер можна приступити до створення опису інтерфейсу Web-сервісу. Для цього просто створимо новий модуль і в ньому опишемо інтерфейс IMult, що містить єдиний метод Multiply:
І нарешті, нам слід створити модуль з реалізацією методу Multiply:
Натиснувши на посилання, що вказує на інтерфейс 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-сервіс цілком працездатний.
Отже, ми навчилися створювати свої Web-сервіси за допомогою Delphi 6 і тестувати їх.
У цій статті ми розглянули створення за допомогою Delphi 6 додатків, що використовують Web-сервіси, а також створення самих Web-сервісів і переконалися, що це не дуже складно. У реальному житті, напевно, не варто створювати Web-сервіс, перемножуються два числа, - існує багато інших, набагато більш цікавих завдань, вирішення яких варто реалізувати в вигляді Web-сервісу. Здається, вони не змусять себе чекати.