Программирование Web-сервиса

ЛАБОРАТОРНАЯ РАБОТА

ПРОГРАММИРОВАНИЕ И ИСПОЛЬЗОВАНИЕ

XML WEB-СЕРВИСОВ

Цель работы

Целью работы является изучение программирования поставщиков и клиентов Web-сервисов.

Задачи

Задачами лабораторной работы являются овладение навыками программирования Web-сервисов на различных платформах, построения WSDL-описаний сервисов в автоматизированном режиме, разработки приложений, использующих веб-сервисы в качестве поставщиков данных.

Теоретическая часть

Веб-сервисы.Наиболее просто веб-сервис представить как интерфейс в глобальную сеть для некоторого абстрактного программного обеспечения. Этот интерфейс позволяет фактически абсолютно прозрачно выполнять какие-то функции, возложенные на это программное обеспечение на удаленном компьютере. Например, на удаленном компьютере находится база данных, например, аэрофлота, и веб-сервис по запросу может позволить получить данные обо всех изменениях в расписании полетов.

Веб-сервисы, как таковые, предназначались быть программными, а не визуальными интерактивными решениями (т. е. они предназначались для применения в рамках концепции программа–программа, а не человек–программа). Поэтому они не имеют специального пользовательского интерфейса. Однако благодаря наличию веб-методов они могут в реальном времени предоставлять информацию о чем угодно. Одним словом, веб-сервис предоставляет услуги другим приложениям, причем последние могут быть любого типа, как веб-приложениями, так и обычными приложениями с графическим интерфейсом.

Иными словами, каждый Web-сервис – это удаленная функция, к которой можно обратиться через Web, передав некоторый набор входных параметров и получив в ответ выходные значения. То есть если Web-приложение предназначено для организации пользовательского интерфейса к системе через Web-браузер, то Web-сервис нужен для программного доступа со стороны других приложений с использованием Интернет-протоколов.

Технология веб-сервисов стандартизована, для нее разработана соответствующая спецификация корпорации W3C. Согласно приведенному в ней определению, веб-сервис –это программная система, идентифицируемая строкой URI, чьи публичные интерфейсы и привязки определены и описаны посредством XML.

В целом разработка Web-сервиса гораздо проще, чем Web-приложения, как раз потому, что у него нет пользовательского интерфейса, а есть одна или несколько входных точек внешнего доступа. На практике мы часто используем термин «сервис-ориентированное приложение», имея при этом в виду взаимосвязанный набор Web-функций, позволяющий внешней системе реализовать выполнение на их основе достаточно сложных прикладных задач.

Структура веб-сервисов.Веб-сервисы базируются на применении открытых, утверждаемых консорциумом IT-сообщества стандартах и протоколах, ключевыми из которых являются следующие:

– SOAP (Simple Object Access Protocol) — протокол доступа к простым объектам, т. е. механизм для передачи информации между уделенными объектами на базе протокола HTTP и некоторых других Интернет-протоколов;

– WSDL (Web Services Description Language) — язык описания веб-сервисов;

– UDDI (Universal Description, Discovery and Integration) — универсальное описание, обнаружение и интеграция, упрощенного говоря, протокол поиска ресурсов в Интернет.

SOAP.Базовым протоколом, обеспечивающим взаимодействие в среде веб-сервисов, является протокол SOAP (Simple Object Access Protocol). Он позволяет приложениям взаимодействовать между собой через Internet, используя для этого XML-документы, называемые сообщениями SOAP.

Сообщение SOAP содержит конверт, который описывает содержимое, предполагаемого получателя сообщения и требования к обработке сообщения. SOAP-сообщения представляет собой иерархическую структуру вложенных XML-элементов (или узлов): SOAPMessage, SOAPPart, SOAPEnvelope, SOAPHeader, SOAPBody и содержимое передаваемого сообщения в формате XML (XML content).

UDDI.Спецификация UDDI (UDDI (Universal Description, Discovery and Integration – универсальное описание, расположение и интеграция)) описывает базирующийся на протоколе SOAP веб-сервис, в задачи которого входит определение местоположения и описание протокола взаимодействия любого веб-сервиса. По сути, это каталог доступных веб-сервисов.

WSDL.После того как нужный веб-сервис найден в одном из каталогов UDDI, нужна информация о том, как собственно обратиться к веб-сервису и какие конкретно условия или правила необходимо соблюсти, чтобы сделать это правильно. Для этого используется WSDL (Web Service Description Language – язык описания веб-сервиса), который предназначен, как и следует из его названия, для описания веб-сервисом своих возможностей, своего интерфейса и некоторых метаданных предназначенных для использования теми, кто будет использовать этот веб-сервис.

Описание веб-сервиса на языке WSDL содержит описание функций этого сервиса, кому этот сервис принадлежит (компания, адрес и другие данные), формальное описание процесса вызова функций. Это описание полностью самодостаточно и позволяет использовать веб-сервис, пользуясь только этой информацией.

Схема работы веб-сервиса.В общем виде схему взаимодействия клиента с веб-сервисом можно представить следующим образом (рис. 1).

Программирование Web-сервиса - student2.ru

Рисунок 1 – Схема работы веб-сервиса

Под «запросом» подразумевается вызов метода (процедуры, функции), под «ответом» – результат выполнения вызванного метода.

Веб-сервисы в ASP.NET.Создание веб-службы похоже на создание веб-страницы. Платформа. NET предоставляет оболочку WebMethods, которая позволяет преобразовывать SOAP-сообщения в классы. NET. В результате веб-методы, объявляемые в веб-сервисе, почти не отличаются от функций, которые программируются при разработке веб-форм.

Однако есть ряд требований, которыми следует руководствоваться при разработке веб-сервисов. Во-первых, файл веб-сервиса должен иметь расширение asmx. Во-вторых, файл веб-сервиса должен начинаться с директивы WebService. В-третьих, метод, вызываемый через веб, должен иметь атрибут WebMethod. Это делается путем аннотирования методов атрибутом [WebMethod], находящемся в пространстве имен System. Web. Services.

Среда Microsoft Visual Studio, в которой традиционно создаются как веб-приложения, так и веб-сервисы, позволяет максимально автоматизировать процесс разработки веб-сервиса. Достаточно создать новое веб-приложение и выбрать его тип ( Web Services). Кроме того, Visual Studio позволяет протестировать веб-сервис. Для его отображения используется файл DefaultWsdlHelpGenerator. aspx, размещенный в системной папке CONFIG.

Использование Visual Studio также упрощает разработку клиентов веб-сервисов. Для этого к Windows- или веб-приложению нужно добавить веб-ссылку на сервис. При этом необязательно знать точный URL-адрес сервиса – Visual Studio предоставляет UDDI-интерфейс для поиска доступных веб-сервисов.

Веб-сервисы в PHP.Наиболее распространенными способами создания и использования веб-сервисов в PHP являются библиотека NuSOAP и PHP-расширение SOAP Extension. В лабораторной работе предлагается использовать первый из них.

NuSOAP – представляет из себя набор PHP-классов, позволяющих разработчикам создавать и использовать веб-сервисы на SOAP. NuSOAP может также генерировать WSDL-описание веб-сервиса и использовать его., поддерживает различные виды сервисов (rpc/encoded и document/literal). В то же время необходимо учитывать, что поддержка SOAP и WSDL в NuSOAP реализована не полностью по сравнению с другими реализациями, например, .NET или Apache Axis.

Для использования NuSOAP достаточно скачать его (например, с сайта SourceForge), а потом разместить копию файла nusoap. php в дерево своей программы, чтобы можно было подключать ее в PHP-код.

Ключевым классом, который используется при создании веб-сервиса, является soap_server. Методы сервиса представляют собой обычные PHP-функции, которые с помощью метода register преобразуются в веб-методы веб-сервиса.

NuSOAP предоставляет несколько возможностей, полезных для отладки веб-сервиса. В NuSOAP при отладке можно просмотреть посланный запрос и ответ сервера. Класс soapclient содержит атрибуты request и response, которые позволяют отобразить соответственно запрос и ответ.

Кроме того, NuSOAP позволяет автоматически генерировать WSDL для сервиса, используя дополнительные аттрибуты и методы класса soap_server. Информация о сервисе указывается при помощи метода configureWSDL. Информация о каждом методе определяется указанием дополнительных параметров методу register.

Для создания клиента веб-сервиса используется класс soapclient, в качестве параметра которому передается URL-адрес сервиса. Вызов веб-метода выполняется с помощью метода call того же класса soapclient.

Веб-сервисы в JSP.Разработка Web-сервисов в JSP основана на создании Java-классов, реализующих ту функциональность, которая должен предоставлять веб-сервис. Каждая функция, определенная в составе Java-класса представляет собой веб-метод веб-службы.

В лабораторной работе программирование JSP-приложений выполняется с помощью визуальной среды Eclipse Europe. Для программирования веб-сервисов эта среда предоставляет полезный инструментарий – мастер Web Service. Он позволяет оформить Java-класс в виде веб-службы, в частности, автоматически генерирует ее WSDL-описание.

При разработке JSP-клиента Web-сервиса достаточно разместить WSDL-файл веб-службы в каталоге с приложением. Файлы клиента сервиса нужно представить в форме объектов Web Service Client. В результате будет сгенерирован прокси-класс, соответствующий веб-сервису, и переносящий его функциональность в клиентское приложение.

Вариант А. Технология ASP.NET и СУБД Microsoft SQL Server

Программирование Web-сервиса

1. Создать новый Web-сервис:

Пуск | Microsoft Visual Studio 2005 | Microsoft Visual Studio 2005

ф. Microsoft Visual Studio | File → New → Web Site… → ф. New Web Site → Visual Studio Installed Templates → выбр. Web Service →

Location → выбр. HTTP → http://имя_сервера(например, localhost)/WebService

Language → выбр. Visual C#

2. Открыть вкладку (если она не открылась автоматически) App_Code/Service. cs. Установить курсов в программный код, отображенный на экране.

 

3. Добавить подключение библиотек для работы с базами данных (System. Data, System. Data. SqlTypes и System. Data. SqlClient) и обработки XML-данных (System. Xml):

using System. Data;

using System. Data. SqlTypes;

using System. Data. SqlClient;

using System. Xml;

4. Создать новый Web-метод GetFaculty, возвращающий в XML-формате список факультетов, полученный в результате запроса к базе данных:

[WebMethod]

public DataSet GetFaculty()

{

}

Весь последующий код из этого пункта вводить между открывающей и закрывающей угловыми скобками.

4.1 Создать строковую переменную sql и занести в нее SQL-код запроса к базе данных:

string sql = "select '0' as id, 'Выбор факультета...' as name from Faculty union select * from Faculty";

4.2 Установить соединение с базой данных. Для этого создать экземпляр класса SqlConnection, а конструктору этого класса в качестве параметра передать параметры соединения с базой данных

University:

SqlConnection conn = new SqlConnection("Data Source=имя_сервера;Initial Catalog=University;Integrated Security=True");

4.3 Открыть соединение с помощью метода Open:

conn. Open();

4.4 Создать новый набор данных (экземпляр класса DataSet). Присвоить набору данных название Faculty:

DataSet ds = new DataSet("Faculty");

4.5 Создать экземпляр класса SqlDataAdapter для извлечения информации из базы данных. В качестве параметров конструктору класса передать текст запроса (переменная sql и объект соединения conn:

SqlDataAdapter adapt = new SqlDataAdapter(sql, conn);

4.6 Создать в объекте DataSet (с именем Faculty) новую таблицу данных (DataTable) под именем f и заполнить ее результатом запроса к базе данных:

adapt. Fill(ds, "f");

4.7 В качестве возвращаемого методом значения указать объект ds:

return ds;

5. Аналогичным образом создать Web-методы GetSpec и GetGr, возвращающие в формате XML списки специальностей и групп соответственно.

6. Создать Web-метод University_DataSet, который на основании кодов факультета, специальности и группы возвращает данные об успеваемости студентов. Входные параметры указать при объявлении метода после его имени:

public DataSet University_DataSet(string faculty, string spec, int gr)

Текст запроса задать в виде:

string sql = "select rtrim(fio) as fio, rtrim(subject) as subject, rtrim(ocenka) as ocenka, CONVERT(CHAR(25),data,104) as data from Faculty inner join Speciality on Faculty. id=Speciality. faculty inner join Groups on Speciality. id=Groups. spec inner join Student on Groups. id=Student. gr inner join Uspev on Student. zk=Uspev. student where Faculty. id='"+faculty+"' and Speciality. id='"+spec+"' and Groups. id="+gr;

Использование Web-сервиса

1 Создать новый Web-сайт:

Пуск | Microsoft Visual Studio 2005 | Microsoft Visual Studio 2005

ф. Microsoft Visual Studio | File → New → Web Site… → ф. New Web Site → Visual Studio Installed Templates → выбр. Web Site →

Location → выбр. HTTP → http://имя_сервера(например, localhost)/Lab4_ASP

Language → выбр. Visual C#

2 Перейти на страницу ввода программного кода:

ф. Lab1_ASP → Default. aspx → Source | удалить весь код, расположенный между открывающим и закрывающим тегами элемента BODY

3 Скопировать элемент BODY вместе со всеми вложенными элементами из файла Default. aspx первой лабораторной работы.

4 Подключить к Web-приложению Web-сервис WebService:

ф. Solution Explorer | пр. кн. мыши на Lab4_ASP → выбр. Add Web Reference…

ф. Add Web Reference | стр. URL ← ввести "http://localhost/WebService/Service. asmx" | нажать на кн. Add Reference.

5 Импортировать в Web-приложение подключенный Web-сервис как библиотеку классов и методов. Для этого после описания библиотек, подключаемых по умолчанию, ввести следующий код:

<%@ Import Namespace="localhost" %>

6 Ввести обработчик события загрузки страницы:

<script language="C#" runat="server">

void Page_Load(object sender, EventArgs e)

{

}

</script>

7 Создать экземпляр сервиса (класс Service) для использования методов Web-сервиса:

Service s = new Service();

8 Создать экземпляр класса DataSet и заполнить его с помощью метода GetFaculty Web-сервиса:

DataSet ds_f = s. GetFaculty();

9 Заполнить раскрывающийся список факультетов (элемент с ID="faculty") данными из DataSet:

faculty. DataSource = ds_f. Tables["f"].DefaultView;

faculty. DataTextField = "name";

faculty. DataValueField = "id";

faculty. DataBind();

10 Аналогичным образом заполнить списки групп и специальностей.

11 Создать файл Browse. aspx (см. п. 2). Заменить весь код созданной страницы на код одноименного файла из первой лабораторной работы.

12 В соответствии с пп. 5–10 заполнить таблицу на странице Browse. aspx с помощью метода University_DataSet Web-сервиса.

13 Проверить работоспособность созданного Web-приложения. Для этого перейти на страницу Lab3_ASP - Microsoft Visual Studio | Default. aspx и нажать сочетание клавиш [Ctrl+F5].

   
   
   
   
   
   

Вариант Б. Технология PHP и СУБД MySQL

Наши рекомендации