Из цикла лекций «Internet-технологии разработки приложений» для студентов 4-го курса кафедры Компьютерных технологий физического факультета Донецкого национального университета Web-службы (Web-сервисы) введение Разработка в среде Delphi ДонНУ, кафедра КТ, проф.В.К.Толстых Delphi for .NET Получаем файлы: WebService1.asmx, WebService1.pas, WebService1.bdsproj... Файл WebService1.asmx - где содержится описание класса для данной страницы Новый класс TWebService1 в пространстве имен WebService1 Файл содержит только одну строку. Директива WebService указывает на реализацию кода в отдельном файле WebService1.pas языка С#. Указанная страница должна быть скомпилирована (CTRL+F9) в сборку WebServiceApplication1.dll и помещена в папку \bin данной Web-службы. Файл WebService1.pas Компиляция и тестирование Web-службы После компиляции в виртуальном каталоге WebServiceApplication1 Web-сервера должны быть два обязательных «рабочих» файла: WebService1.asmx, bin/WebServiceApplication1.dll Тестирование Webслужбы WebService1 Добавление описаний к Web-службе Ваш уникальный логический идентификатор пространства имен Web-службы. Принято – домен компании / имя службы Результат тестирования службы: Использование Web-служб Клиентами Web-служб могут быть любые приложения – Win32, .NET и другие платформы. Создание клиента Win32 (Delphi 6, 7…) – Project1.exe Добавляем на форму компонент THTTPRIO – аналог прокси-класса (посредник общения с Web-службой) Создание и добавление WSDL Importer – модуля импорта для удаленного вызова объекта Адрес XML-файла описания службы - WSDL: http://www.donnu.edu.ua/WebServiceApplication1/WebService1.asmx?WSDL (параметр WSDL запроса позволяет получить XML-файл WSDL) Добавлен модуль WebService1.pas Был создан тип объекта для доступа к Web-службе и метод этого объекта Настройки THTTPRIO1 1. 2. 3. Повторно вставить адрес WSD в свойство WSDLLocation Выбрать единственный параметр TWebService1 в Service Выбрать единственный параметр TWebService1Soap в Port Обработка щелчка на кнопке «Запрос службы» Создаем объект WS для работы со службой (тип объекта взят из модуля WebSeervice1, убедитесь, что этот модуль подключен к главному модулю в uses) Приводим объект THTTPRIO1 к типу TWebSdervice1Soap Вызываем метод HelloWorld() Web-службы Запуск приложения Project1.exe При первом вызове через 2 секунды, далее мгновенно... Web-служба сложения двух вещественных чисел Добавляем новый метод Add() Описываем новый метод Add() Тестируем Web-службу с новым методом Использование Web-службы сложения двух вещественных чисел Изменения модуля Unit1.pas: Вызываем метод Add() Web-службы Обновляем (удаляем старый и ставим заново) модуль – WSDL Importer импорта для удаленного вызова объекта «видим» новый метод Add() Создание клиента .NET (Delphi 8, 2005…) Подготовить и сохранить внешний вид приложения ProjectAdd Для создания прокси-класса, в инспекторе объектов щелкнуть правой кнопкой мыши на проекте и выбрать Add Web Reference Создание прокси-класса Выбрать ссылку на WSDL Web-службы Добавить ссылку в проект Справочная информация WSDL в формате XML о Web-службе на www.donnu.edu.ua Описание интерфейса Web-службы в формате XML В папке Web References\ua.edu.donnu.www появляется файл WebService1.pas – исходный код прокси-класса Исходный код прокси-класса (Web References\ua.edu.donnu.www WebService1.pas) Синхронный способ вызова метода HelloWorld() Создание динамического массива Исходный код прокси-класса (продолжение) Асинхронный способ вызова метода HelloWorld() Синхронный способ вызова метода Add() Создание динамического массива Исходный код прокси-класса (продолжение) Асинхронный способ вызова метода Add() Применение Web-службы Подключение модуля donnu.WebService1 к главному модулю: Обработчик события щелчка на кнопке: Неоходим объект WS для работы со службой (тип объекта взят из модуля donnu.WebService1) Асинхронный вызов метода Определяет состояние асинхронной операции Начать асинхронную операцию. Здесь возвращается интерфейса IAsyncResult Остановить приложение, если асинхронная операция еще не завершилась. AsyncWaitHandle - это свойство IAsyncResult Возвращает данные метода Add()