1 Цель работы
Цель работы – создание web –службы для использования её приложениями и закрепить навыки создания распределенных приложений.
2 Основные теоретические положения
Генезис Web
Изначально World Wide Web была сетью документов. Web-серверы общались с клиентами по протоколу HTTP (Hypertext Transfer Protocol) и пересылали информацию в форме гипертекстовых документов, созданных средствами языка HTML (Hypertext Markup Language). Такие документы отображались в браузерах и содержали ссылки на другие документы. Этого было вполне достаточно для удовлетворения запросов создателей Web — ученых, которым было необходимо средство для обмена различными документами: результатами исследований, лабораторными протоколами, отчетами и т.п. Таким образом, Web появился как документно-ориентированная сеть.
Единовластие ученых продолжалось недолго. Вскоре стали появляться коммерческие Web-сайты, содержащие документы, рекламировавшие продукты и сервисы тех или иных компаний. Такие сайты до сих пор составляют основное наполнение Web, но с недавнего времени все большее количество коммерческих сайтов поддерживает транзакции с клиентами, превращаясь таким образом в сайты электронной коммерции. Многие коммерческие сайты строятся не на основе обычных Web-серверов, а с помощью многозвенной архитектуры, подразумевающей использование серверов приложений.
Основным отличием обычных Web-серверов от серверов приложений является то, что последние не просто возвращают документ, а могут обрабатывать пользовательские запросы и содержат код, реализующий бизнес-логику. Обычно серверы приложений генерируют документы динамически, в зависимости от указанных пользователем параметров. Также следует отметить, что применение серверов приложений позволяет создавать масштабируемые решения, способные одновременно обслуживать большое число транзакций.
Появление разнообразных мобильных устройств привело к тому, что вместо традиционных браузеров многие коммерческие Web-приложения теперь помимо протокола HTTP поддерживают и протокол WAP (Wireless Access Protocol) и способны возвращать информацию не только в стандарте HTML, но и в стандарте, удовлетворяющем пользователей, обращающихся к сервисам через мобильные устройства, — WML (Wireless Markup Language).
Естественно, электронная коммерция не может ограничиваться простой обработкой транзакций — следующим логических шагом в развитии Web стала интеграция бизнес-процессов различных компаний. Таким образом на свет появляется сервис-ориентированный Web. В его основе лежат две относительно новые технологии — SOAP (Simple Object Access Protocol) и XML (Extensible Markup Language). Согласно этому сценарию Web состоит из набора серверов приложений, обменивающихся информацией в формате XML по протоколу SOAP.
Основой сервис-ориентированного Web является Web-сервис — набор логически связанных функций, которые могут быть программно вызваны через Internet. Информация о том, какие функции предоставляет данный Web-сервис, содержится в документе WSDL (Web Service Description Language), а для поиска существующих Web-сервисов предполагается использование специальных реестров, совместимых со спецификацией UDDI (Universal Description, Discovery and Integration).
Сервис-ориентированный Web
Web-сервисы(службы) представляют собой технологию интеграции приложений, которая может использоваться в Internet. В качестве примера возможного использования Web-сервисов рассмотрим планирование путешествий. Обычно в такой ситуации требуются: заказ билетов на самолет, бронирование мест в гостинице, аренда автомобиля и, возможно, использование услуг местных компаний, организующих экскурсии.
Традиционно используя Internet, вам придется посетить сервер авиакомпании, сервер гостиницы или сети гостиниц, сервер компании по аренде автомобилей и сервер компании, специализирующейся на организации экскурсий в выбранном вами месте. Все эти действия могут занять достаточно много времени, прежде чем вы достигнете цели. И при этом ни одна из задействованных вами компаний не будет знать, каковы ваши планы, а следовательно, не сможет оптимизировать ваше время. Проблема заключается в том, что компании, специализирующиеся на отдельных областях — авиа, гостиничной, прокате автомобилей и т.п., в большинстве случаев замкнуты сами на себя и используют собственные средства хранения и представления данных.
Более удобно было бы запустить приложение, которое бы приняло от вас необходимую информацию и выполнило все рутинные действия — заказ билетов, бронирование гостиницы и т.п. — автоматически, без вашего участия. Чтобы это стало возможным, вы должны использовать Web-сервисы. Давайте рассмотрим, что изменится в этом случае.
Предположим, авиакомпания предоставляет Web-сервис, позволяющий приложениям получать список рейсов между двумя городами для заданной даты. В этом случае больше не требуется обращаться к Web-узлу авиакомпании и указывать различные критерии поиска — вся необходимая информация доступна в виде единого XML-документа. Теперь предположим, что авиакомпания, отель и агентство по прокату автомобилей предоставляют Web-сервисы, позволяющие программно приобретать билеты, бронировать номера и арендовать автомобили. В этом случае можно объединить вызовы всех этих сервисов в единое приложение, которое сможет выполнить всю рутинную работу без участия пользователя.
Впрочем, на этом функциональность нового класса Web-приложений не заканчивается. Наше приложение может, например, периодически обращаться к Web-сервису авиакомпании для определения статуса рейса и в случае его задержки оповещать сервисы гостиницы, службы проката и т.п. для продления бронирования.
Помимо очевидного повышения качества обслуживания клиентов использование Web-сервисов имеет множество других преимуществ. Например, если агентство проката автомобилей знает, что ваш рейс задерживается, оно может более гибко распорядиться своими автомобилями. По мере возрастания числа Web-сервисов мы сможем увидеть более комплексные примеры их использования. Однако следует отметить, что внедрение концепции Web-сервисов требует не только пересмотра многих бизнес-правил и схем взаимодействия между отраслями и секторами той или иной отрасли, но и повышения безопасности обмена данными.
Рассмотрев практическое применение Web-сервисов, обратимся к стандартам, лежащим в основе этих сервисов.
Стандарты для Web-сервисов
Как мы уже знаем, в основе Web-сервисов лежат Internet-стандарты. Эти стандарты определяют протоколы, а не способы их реализации. Такое утверждение является залогом успеха Internet — ни одна компания не может влиять на Internet-стандарты и задавать собственные правила игры. Например, стандарты Web-сервисов разрабатываются совместно такими компаниями, как IBM, Microsoft, Ariba и некоторыми другими, и обсуждаются комитетом World Wide Web Consortium (W3C).
Web-сервисы базируются на трех основных Web-стандартах: SOAP (Simple Object Access Protocol) — на протоколе для посылки сообщений по протоколу HTTP и другим Internet-протоколам; WSDL (Web Services Description Language) — на языке для описания программных интерфейсов Web-сервисов; UDDI (Universal Description, Discovery and Integration) — на стандарте для индексации Web-сервисов.
Рисунок 2‑1
На рис. 2-1 показано, как эти три стандарта взаимодействуют друг с другим.
Серверы приложений являются хранилищами Web-сервисов и делают их доступными через протоколы HTTP GET, HTTP POST и HTTP SOAP.
Существующие Web-сервисы описываются в WSDL-документах, которые располагаются либо на сервере приложений, либо в специальных XML-хранилищах. WSDL-документ может ссылаться на другие WSDL-документы и документы XSD (XML Schema), в которых описаны типы данных, используемые Web-сервисами. XML-хранилища используются для управления WSDL-документами. Внутри WSDL-документа находится адрес (URL) Web-сервиса. Web-сервисы описаны и проиндексированы в бизнес-реестре, содержащем адреса (URL) WSDL-документов.
В следующих разделах мы рассмотрим три основных Web-стандарта, на которых базируются Web-сервисы SOAP, WSDL и UDDI, более подробно.
SOAP — Simple Object Access Protocol
SOAP — это стандарт для отсылки и получения сообщений по Internet. Изначально этот протокол был предложен фирмой Microsoft в качестве средства для удаленного вызова процедур (RPC, Remote Procedure Call) по протоколу HTTP, а спецификация SOAP 1.0 (Userland, Microsoft, Developmentor) была тесно связана с Component Object Model. Фирма IBM и ряд других компаний, в том числе Lotus, внесли определенный вклад в развитие этого протокола, и его стандарт был направлен на рассмотрение комитетом W3C.
Спецификация SOAP определяет XML-«конверт» для передачи сообщений, метод для кодирования программных структур данных в формате XML, а также средства связи по протоколу HTTP.
SOAP-сообщения бывают двух типов: запрос (Request) и ответ (Response). Запрос вызывает метод удаленного объекта, ответ возвращает результат выполнения данного метода. На рис. 2 и 3 приведены примеры запроса и ответа в формате SOAP.
Рисунок 2‑2
Рисунок 2‑3
Спецификация SOAP определяет формат кодирования, который, в свою очередь, задает способ представления данных в XML-формате.
Одной из первых реализаций протокола SOAP была Java-версия, созданная фирмой Developmentor. Компания IBM выпустила собственную Java-версию, известную под названием IBM SOAP4J, доступную на Web-узле alphaWorks (http://www.ibm.com/alphaworks/). Впоследствии эта версия была интегрирована в проект Apache XML (http://www.xml.apache.org/). В настоящее время она носит название Apache SOAP 2.0 и работает под управлением Apache Tomcat, IBM WebSphere Application Server и других серверов, поддерживающих сервлеты. Версия Microsoft, известная под названием SOAP Toolkit, позволяет использовать Visual Basic. Более полный список известных реализаций протокола SOAP можно найти на Web-узле SOAP WebServices Resource Center (http://www.soap-wrc.com/webservices/), а список доступных SOAP Web-сервисов — на Web-узле SOAP Web Services (http://www.xmethods.net/).
WSDL — Web Services Description Language
Для того чтобы приложения могли использовать Web-сервисы, программные интерфейсы последних должны быть детально описаны — с этой точки зрения язык WSDL играет ту же роль, что и язык Interface Definition Language (IDL) в распределенных вычислениях. Описание может включать такую информацию, как протокол, адрес сервера, номер используемого порта, список доступных операций, формат запроса и ответа и т.п.
Для описания этой информации было предложено несколько языков. Одним из них был язык Service Description Language (SDL), разработанный Microsoft и входивший в первую версию Microsoft SOAP Toolkit. Компания IBM переработала спецификацию и, использовав спецификацию Network Accessible Service Specification Language (NASSL), выпустила NASSL Toolkit как часть SOAP4J. Идеи, реализованные в NASSL, повлияли на спецификацию языка SOAP Contract Language (SCL), предложенную Microsoft. В настоящее время обе спецификации (NASSL и SDL/SCL), а также предложения других фирм учтены в спецификации языка WSDL. Для описания бизнес-логики IBM и Microsoft работают над спецификацией языка Web Services Flow Language (WSFL).
На рис. 2-4 показан скелет описания сервисов на языке WSDL.
Рисунок 2‑4
Как мы видим, описание сервисов представляет собой XML-документ, состоящий из нескольких элементов, в том числе из описания пространства имен (namespace), описания типов и элементов, сообщений, порта, а также возможных операций — запросов и ответов.
Файл, содержащий описание сервисов, является достаточно комплексным документом, поэтому для его создания по возможности следует пользоваться автоматическими генераторами, включенными в состав средств разработки.
Описание языка WSDL можно найти на Web-сайте компании Microsoft по адресу http://www.msdn.microsoft.com/xml/general/wsdl.asp/.
UDDI — Universal Description, Discovery and Integration
Задача UDDI — предоставить механизм для обнаружения Web-сервисов. UDDI задает бизнес-реестр, в котором провайдеры Web-сервисов могут регистрировать сервисы, а разработчики — искать необходимые им сервисы. Компании IBM, Microsoft и Ariba создали собственные UDDI-реестры (в скором времени эти реестры будут объединены в Web-реестр), в одном из которых разработчики могут зарегистрировать свои Web-сервисы, после чего данные будут автоматически реплицированы в другие реестры ( См. рис. 5).
Рисунок 2‑5
UDDI базируется на элементах четырех типов: Business Entity, Business Service, Binding Template и Technology Model. Элемент Business Entity описывает индустрию, предоставляющую данный Web-сервис. Этот элемент может включать описания категорий для данной индустрии, облегчающие более детальный поиск сервисов.
Business Service — это класс сервисов в рамках определенной отрасли промышленности или услуг. Каждая отрасль принадлежит определенному элементу Business Entity.
Вместе Binding Template и Technology Model определяют Web-сервис. Technology Model содержит абстрактное описание, а Binding Template — конкретную спецификацию сервиса. Каждый элемент Binding Template принадлежит определенному элементу Business Service, но несколько элементов Binding Template могут ссылаться на один элемент Technology Model.
Бизнес-реестр UDDI сам является SOAP Web-сервисом. Он поддерживает операции создания, модификации, удаления и поиска элементов всех четырех рассмотренных выше типов.
Полное описание UDDI можно найти на Web-сайте по адресу http://www.uddi.org/.
Средства разработки
Рассмотрев три основных Web-стандарта, на которых базируются Web-сервисы, — SOAP, WSDL и UDDI, мы теперь знаем, что они являются достаточно комплексными при создании всех необходимых для описания Web-сервиса XML-документов. Эту работу выполняют специальные средства разработки, предоставляя разработчикам возможность сосредоточиться на бизнес-логике создаваемого сервиса, а не на низкоуровневых деталях его реализации. Среди наиболее популярных в настоящее время средств разработки Web-сервисов следует упомянуть Microsoft SOAP Toolkit и IBM XML and Web Services Development Envirоnment (WSDE).
Ниже мы рассмотрим еще одно средство для создания Web-сервисов — Microsoft Visual Studio.NET, которое в скором времени станет основным инструментом для разработчиков, создающих решения для платформы Microsoft .Net.
3 Порядок выполнения работы
3.1 Подготовка к работе
Для создания Web-сервиса средствами Microsoft Visual Studio.NET необходимо выполнить следующие действия: Запустить Visual Studio.NET 7.0. Выполнить команду File | New | Project (или выбрать команду Create New Project на стартовой странице VS Home Page). В панели New Projects выбрать Visual C# Projects, в панели Templates выбрать Web Service (рис. 3-1). В поле Location выбрать http://localhost/myWebService1. Наш первый проект будет называться myWebService Задать название сервиса и нажать Ok.
Рисунок 3‑1
Установим необходимые опции проекта (рис. 3-2)
а) В Solution explorer выбрать проект myWebService
б) View -> Property Pages
в) В ветви дерева Configuration Properties -> Debugging устанавливаем ASP.NET debugging значение «False». Нажимаем «ОК»
Рисунок 3‑2
На этом подготовка к работе над проектом закончена. Теперь приступим к созданию самого проекта.
3.2 Пример выполнения
3.2.1 Создание web - службы
Для примера рассмотрим web службу с помощью которой будем переводить курс из какой либо валюты на рубли, при этом курс вводит сам пользователь. В реальных условиях процесс перевода можно выразить как «СУММА * КУРС», то есть произведение суммы на курс дает нам искомое значение.
При создании новой web службы в Visual Studio 7.0 (или .Net), программисту предоставляется шаблонный код web службы, для того, что бы не переписывать однотипный служебный код по нескольку раз. Это сильно упрощает работу и позволяет сосредоточить внимание на алгоритме и структуре программы.
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
namespace myWebService
{
///
/// Summary description for Service1.
///
[WebService(Namespace="http://localhost/myWebServices")]
public class Service1 : System.Web.Services.WebService
{
public Service1()
{
//CODEGEN: This call is required by the ASP.NET Web Services Designer
InitializeComponent();
}
#region Component Designer generated code
//Required by the Web Services Designer
private IContainer components = null;
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
}
///
/// Clean up any resources being used.
///
protected override void Dispose( bool disposing )
{
if(disposing && components != null)
{
components.Dispose();
}
base.Dispose(disposing);
}
#endregion
// WEB SERVICE EXAMPLE
// The HelloWorld() example service returns the string Hello World
// To build, uncomment the following lines then save and build the project
// To test this web service, press F5
// [WebMethod]
// public string HelloWorld()
// {
// return "Hello World";
// }
}
}
Разработчики позаботились о начинающих программистах и сразу создали функцию возвращающую фразу «Hello world». Нам необходимо создать свою функцию которая будет выполнять действие которое нам необходимо, а именно перевод валют.
При создании проекта уже создался файл service1.asmx…. в нем нам предстоит написать код
Добавим к существующему коду функцию convertRub2Euro которой будем передавать два параметра: первый
тип: число с плавающей точкой
назначение: Сумма
курс: нужный курс
Функция возвращает строковое значение.
На рисунке 3-3 приведен текст функции
Рисунок 3‑3
Теперь запустите проект нажав кнопку на панели инструментов. Запуститься браузер с страницей на которой будут отображены функции, доступные для использования. Директива “[WebMthod]” перед кодом функции указывает компилятору на то что эта функция будет вызываться другими приложениями.
Рисунок 3‑4
Нажав на Service Description. можно посмотреть в XML формате как и какие методы поддерживает наша web служба. Ниже приведен увиденный результат:
- http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://localhost/myWebServices" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://localhost/myWebServices" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
-
- qualified" targetNamespace="http://localhost/myWebServices">
- convertRub2Euro">
-
-
1" maxOccurs="1" name="num" type="s:double" />
1" maxOccurs="1" name="kurs" type="s:double" />
- convertRub2EuroResponse">
-
-
0" maxOccurs="1" name="convertRub2EuroResult" type="s:string" />
- convertRub2EuroSoapIn">
parameters" element="tns:convertRub2Euro" />
- convertRub2EuroSoapOut">
parameters" element="tns:convertRub2EuroResponse" />
- Service1Soap">
- convertRub2Euro">
tns:convertRub2EuroSoapIn" />
tns:convertRub2EuroSoapOut" />
- Service1Soap" type="tns:Service1Soap">
http://schemas.xmlsoap.org/soap/http" style="document" />
- convertRub2Euro">
http://localhost/myWebServices/convertRub2Euro" style="document" />
-
literal" />
-
literal" />
- Service1Soap12" type="tns:Service1Soap">
http://schemas.xmlsoap.org/soap/http" style="document" />
- convertRub2Euro">
http://localhost/myWebServices/convertRub2Euro" style="document" />
-
literal" />
-
literal" />
- Service1">
- Service1Soap" binding="tns:Service1Soap">
http://localhost/myWebService/Service1.asmx" />
- Service1Soap12" binding="tns:Service1Soap12">
http://localhost/myWebService/Service1.asmx" />
Примитивная web – служба готова к использованию. Нажав на название функции, откроется следующая страница в которой помимо технической информации о службе присутствуют поля для ввода входных параметров созданной функции
Service1
Click here for a complete list of operations.
convertRub2Euro
Test
To test the operation using the HTTP POST protocol, click the 'Invoke' button.
Parameter
Value
num:
kurs:
SOAP
The following is a sample SOAP request and response. The placeholders shown need to be replaced with actual values. POST /myWebService/Service1.asmx HTTP/1.1Host: localhostContent-Type: text/xml; charset=utf-8Content-Length: lengthSOAPAction: "http://localhost/myWebServices/convertRub2Euro" double double HTTP/1.1 200 OKContent-Type: text/xml; charset=utf-8Content-Length: length string
HTTP POST
The following is a sample HTTP POST request and response. The placeholders shown need to be replaced with actual values. POST /myWebService/Service1.asmx/convertRub2Euro HTTP/1.1Host: localhostContent-Type: application/x-www-form-urlencodedContent-Length: length num=string&kurs=stringHTTP/1.1 200 OKContent-Type: text/xml; charset=utf-8Content-Length: length string
Введем сумму равную 12 и курс равный 12 в ресультат е после нажатия на кнопку invoke будет выдан результат в виде xml
http://localhost/myWebServices">144
Здесь содержится посчитанный результат и тип данных которые необходимо использовать при работе с ними
3.2.2 Создание клиента для доступа к web службе.
Web – служба может быть использована приложением работающим на любой платформе. Создадим простейшее windows приложение конторе будет использовать созданную web – службу для перевода курса валют. Само приложение может находиться где угодно поэтом у этап создания windows приложения пропустим и приступим к подключению web – службы к нашему приложению.
В Solution Explorer -> Add Reference нажимаем правую кнопку мыши и выбираем Add Web Reference. В появившемся окне (рис. 3-5) выбираем Web services on the local machine, так как наша созданная web служба находиться на локальном компьютере. Если есть локальная сеть и служба доступна из нее то искать её естественно нужно в Browse UDDI Servers on the local network
Рисунок 3‑5
Далее в появившемся списке выбираем нашу web – службу. После того, как система САМА найдет функции нужно добавить их в проект кнопкой Add Reference (рис 3-6).
Поле Web Reference Name можно оставить нетронутым, но для того что бы внести смысловую нагрузку в имя ссылки на службу её можно придать смысловую нагрузку.
Рисунок 3‑6
В результате проведенных действий у нас есть проект windows приложения, которое связанно с разработанной ранtе web службой. Теперь необходимо разаработать интерфейс самого приложения. В данном примере будем использовать следующий вид приложения.
Рисунок 3‑7
При нажатии на кнопку «Перевести» будем выполнять следующие действия для вызова функции web – службы.
private void button1_Click(object sender, System.EventArgs e)
{
localhost.Service1 serv= new webServiceClient.localhost.Service1();
textBox3.Text = serv.convertRub2Euro(Convert.ToDouble(textBox1.Text),Convert.ToDouble(textBox2.Text)).ToString();
}
В результате получим приложение которое будет использовать web – службу, а точнее функцию web – службы для работы. Так как для примера был выбран достаточно простой вариант задания, это вовсе не значит, что способности web служб ограничиваются подобными возможностями…
3.3 Составление отчета лабораторной работы.
Для составления отчета лабораторной работы необходимо предоставить следующие данные и ответить на контрольные вопросы.
Лабораторная работа №
Тема
Выполнил
Принял
Дата
Оценка
1. Цель
2. Условие задачи
3. Скриншот документа с рабочими функциями web – службы
4. Функции web службы(Описание входных/выходных параметров+код)
4. Вывод
4 Контрольные вопросы
1. Что называется web – службой?
2. Перечислите стандарты для Web-сервисов?
3. Что такое SOAP?
4. Что такое WSDL?
5. Что такое UDDI?
6. Какой директивой определяется использование функции другими приложениями?
7. Какое расширение имеют файлы web – служб?
8. Какой формат возвращаемых данных используется в web - сервисах(службах)?
9. Как добавить ссылку на web службу локальной сети в windows приложение?
10. Можно ли использовать Доступ к БД из web – служб
11. Какую роль играет имя ссылки на службу в windows приложении?
12. Приведите примеры, где можно использовать web – службы.
5 Задания на группу
1. Создать web – службу для вывода среднего геометрического для 4х чисел, притом для тех из них, которые больше заданного М.
2. Создать web – службу для доступа к БД.
3. Создать web – службу для вывода из БД всех покупателей магазина.(БД создается самостоятельно)
4. Создать web – службу для проверки имени пользователя и пароля
5. Создать web – службу для проверки имени пользователя и пароля с использованием базы данных MS Access
6. Создать web – службу для использования какого-либо метода оптимизации.
6 Список литературы
1 Andreas Eide, «Professional ASP.NET Web Services», Wrox Press, 2001
2 Michael Stiefel, «Application Development Using C# and .NET» Prentice Hall,2001
3 Andrew Krowczyk, «C# Web Services. Building WS with .Net Remoting and ASP.Net», Wrox Press, 2001
4 www.rsdn.ru
5 www.msdn.com
6 www.gotdotnet.com