— Ничего не поделаешь, — возразил Кот. — Все мы здесь не в своем уме — и я, и ты, иначе бы ты сюда не попала. (с) Льюис Кэрролл

Итак, наступает волнительный момент. Вот за кулисами приготовились музыканты с фанфарами, и нам остается лишь поставить последнюю, жирную точку. А именно — узнать, как использовать ресурсы сервиса в своей программе. Статьи из этой серии:

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» (для простоты).

1

2. Для того, чтобы работать с сервисом, набросаем на форму компонентов. Это пример, а не рабочая программа, поэтому форму можно пока особо не настраивать.

2

Для проверки соединения с сервисом и тестирования его методов нам потребуется: DateTimePicker, в котором будет устанавливаться дата, на которую будет «выясняться» курс валюты; кнопка, по которой все это будет происходить; и ListBox, в котором будут писаться все результаты, полученные от сервера.

3. Для того, чтобы связаться с сервисом, необходимо описать его интерфейс на основе WSDL-описания.  Как мы узнали ранее, это очень трудоемкий процесс. Delphi позволяет автоматизировать процесс создания интерфейсов на основе WSDL.

3

Для этого нужно воспользоваться мастером импорта WSDL, который можно запустить из меню «Component». Разумеется, если тот язык и среда, которыми вы пользуетесь, не поддерживает автоматизированный импорт WSDL, вам придется самостоятельно описывать интерфейс доступа к серверу, включая установку соединения и передачу данных по протоколу SOAP.

4, В мастере необходимо указать ссылку (путь) к файлу с WSDL-описанием.

5

Также необходимо выбрать версию 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. И, наконец, запускаем проект и наслаждаемся картинкой:
6

На этом курс статей о том, как создать свой первый веб-сервис, можно считать завершенным. Всем спасибо.

Следующие статьи будут посвящены разработке игр на Microsoft XNA, разработке приложений под Android, и настройке и основам разработки приложений с помощью Oracle APEX.

4 комментария

  1. Temoxa:

    Привет! Крутая статья, а если я хочу выдернуть с помощью этого сервиса большой массив данных, и загрузить в грид, как быть?

    • devSonia:

      Выдергиваете таким же образом, кладете данные в ClientDataSet или его аналог, к которому через DataSource прицеплен грид.

  2. Мунко:

    пробую написать клиента к soap серверу, ничего не получается, есть ли пример с использованием HTTPRIO1?


  • Яндекс.Метрика Счетчик PR-CY.Rank