Итак, наступает волнительный момент. Вот за кулисами приготовились музыканты с фанфарами, и нам остается лишь поставить последнюю, жирную точку. А именно — узнать, как использовать ресурсы сервиса в своей программе. Статьи из этой серии:
Web-сервис на С# и клиент на Delphi. Вступление.
WEB-сервис на C# и клиент на Delphi. Часть 1. Создание решения, создание проекта БД.
WEB-сервис на C# и клиент на Delphi. Часть 2. Сервис на C#
WEB-сервис на C# и клиент на Delphi. Часть 3. Как создать средство администрирования сервиса
Итак, вспомним, что у нас есть. У нас есть веб-сервис, написанный на языке C#, и предоставляющий услугу информирования о курсе валюты на заданную дату. У нас есть база данных курсов валют. У нас есть средство администрирования для нашего сервиса. Все это разработано с помощью Microsoft Visual Studio 2010 Express. А теперь представим, что этого всего у нас нет. У нас есть только информация о том, что «вотнатаком» URL висит сервис, который может выдавать (по заверениям его авторов) актуальные сведения о курсе валюты на заданную дату, и у нас есть клиент, который хочет… хочет… клиенты — они такие, всегда чего то хотят, и часто сами не знают, чего именно. Но у нас клиент замечательный, и он хочет видеть график изменения курса валют, построенный по указанным контрольным датам (например, он мечтает нарисовать гору Фудзи с помощью графика курса доллара). Да, и кстати. Мы не умеем (или не хотим) пользоваться ничем, кроме Delphi. Вот просто так. На самом деле в статье я это делаю на Delphi лишь для того, чтобы показать — платформа, на которой реализуется клиент не зависит от платформы, на которой реализован сервис. Да, можно было развернуть всю схему и сделать сервис на Delphi, а клиента на C#, но лично мне больше нравиться писать web-продукты на C#, а десктопные приложения (пусть даже и использующие web-ресурсы) на Delphi. Можно забабахать сервис на Java, а клиента — на PHP. Это поменяет лишь синтаксис, но не поменяет сам принцип работы с сервисами. Так что Delphi — это личное (ну, или корпоративное) дело каждого. Итак, мы знаем про сервис. А как к нему обратится? Что у него спрашивать? Как нам выучить его язык? Для этого и существует WSDL, о котором я рассказывала в самой первой статье: WSDL (англ. Web Services Description Language) — язык описания веб-сервисов и доступа к ним, основанный на языке XML. Именно к WSDL-описанию сервиса и нужно обратится, чтобы выучить его язык. Обычно, авторы сервисов сообщают о местонахождении WSDL к своим сервисам. В нашем случае, для доступа к WSDL нужно обратится к странице сервиса, дописав в адресной строке «?WSDL». То есть, если ваш сервис крутится на адресе
http://localhost:183877/CourceService.asmx
то WSDL будет доступен по адресу
http://localhost:183877/CourceService.asmx?WSDL
.
Откройте и посмотрите, как выглядит файл WSDL-описания для созданного нами ранее сервиса? Как видите, это можно назвать «многобуков, ниасилил». Действительно, разбираться вручную с WSDL-описаниями довольно затруднительно. Но для этого есть очень удобные инструменты, с которыми мы сейчас и познакомимся. Но сначала нужно создать Delphi-проект.
1. Запустим среду Delphi, и создадим новый проект «VCL Forms Application» (для простоты).
2. Для того, чтобы работать с сервисом, набросаем на форму компонентов. Это пример, а не рабочая программа, поэтому форму можно пока особо не настраивать.
Для проверки соединения с сервисом и тестирования его методов нам потребуется: DateTimePicker, в котором будет устанавливаться дата, на которую будет «выясняться» курс валюты; кнопка, по которой все это будет происходить; и ListBox, в котором будут писаться все результаты, полученные от сервера.
3. Для того, чтобы связаться с сервисом, необходимо описать его интерфейс на основе WSDL-описания. Как мы узнали ранее, это очень трудоемкий процесс. Delphi позволяет автоматизировать процесс создания интерфейсов на основе WSDL.
Для этого нужно воспользоваться мастером импорта WSDL, который можно запустить из меню «Component». Разумеется, если тот язык и среда, которыми вы пользуетесь, не поддерживает автоматизированный импорт WSDL, вам придется самостоятельно описывать интерфейс доступа к серверу, включая установку соединения и передачу данных по протоколу SOAP.
4, В мастере необходимо указать ссылку (путь) к файлу с WSDL-описанием.
Также необходимо выбрать версию SOAP, которую вы будете использовать.
После окончания работы мастера будет создан модуль, обеспечивающий поддержку и взаимодействия созданного проекта и сервиса.
5. Осталось написать всего каких то пару строк кода. А именно — реализовать обработчик нажатия на кнопку «Запрос».
var Service : CourceServiceSoap; ServiceResult : String; begin Service := GetCourceServiceSoap; //Подключаемся к сервису ServiceResult := Service.getCourse( //Запрашиваем у сервиса интересующий метод DateTimeToXSDateTime(DateTimePicker1.Date) //Передавая ему значение параметра-даты //введенной пользователем ).DecimalString; //Результат преобразуем в строку ListBox1.Items.Add( //В листбокс добавляем элемент DateToStr(DateTimePicker1.Date)+' value='+ //из даты, введенной пользователем ServiceResult //и ответа от сервиса );
6. И, наконец, запускаем проект и наслаждаемся картинкой:
На этом курс статей о том, как создать свой первый веб-сервис, можно считать завершенным. Всем спасибо.
Следующие статьи будут посвящены разработке игр на Microsoft XNA, разработке приложений под Android, и настройке и основам разработки приложений с помощью Oracle APEX.