Методические указания: Основы создание web - служб
Лабораторная работа. Тема : лСоздание web Ц служб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-сервисов.
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.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> /// Summary description for Service1. /// </summary> [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; /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { } /// <summary> /// Clean up any resources being used. /// </summary> 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 служба. Ниже приведен увиденный результат: <?xml version="1.0" encoding="utf-8" ?> - <wsdl:definitions xmlns:soap=" 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/"> - <wsdl:types> - <s:schema elementFormDefault="qualified" targetNamespace=" http://localhost/myWebServices"> - <s:element name="convertRub2Euro"> - <s:complexType> - <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="num" type="s:double" /> <s:element minOccurs="1" maxOccurs="1" name="kurs" type="s:double" /> </s:sequence> </s:complexType> </s:element> - <s:element name="convertRub2EuroResponse"> - <s:complexType> - <s:sequence> <s:element minOccurs="0" maxOccurs="1" name=" convertRub2EuroResult" type="s:string" /> </s:sequence> </s:complexType> </s:element> </s:schema> </wsdl:types> - <wsdl:message name="convertRub2EuroSoapIn"> <wsdl:part name="parameters" element="tns:convertRub2Euro" /> </wsdl:message> - <wsdl:message name="convertRub2EuroSoapOut"> <wsdl:part name="parameters" element="tns:convertRub2EuroResponse" /> </wsdl:message> - <wsdl:portType name="Service1Soap"> - <wsdl:operation name="convertRub2Euro"> <wsdl:input message="tns:convertRub2EuroSoapIn" /> <wsdl:output message="tns:convertRub2EuroSoapOut" /> </wsdl:operation> </wsdl:portType> - <wsdl:binding name="Service1Soap" type="tns:Service1Soap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> - <wsdl:operation name="convertRub2Euro"> <soap:operation soapAction="http://localhost/myWebServices/convertRub2Euro " style="document" /> - <wsdl:input> <soap:body use="literal" /> </wsdl:input> - <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> - <wsdl:binding name="Service1Soap12" type="tns:Service1Soap"> <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> - <wsdl:operation name="convertRub2Euro"> <soap12:operation soapAction=" http://localhost/myWebServices/convertRub2Euro" style="document" /> - <wsdl:input> <soap12:body use="literal" /> </wsdl:input> - <wsdl:output> <soap12:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> - <wsdl:service name="Service1"> - <wsdl:port name="Service1Soap" binding="tns:Service1Soap"> <soap:address location="http://localhost/myWebService/Service1.asmx" /> </wsdl:port> - <wsdl:port name="Service1Soap12" binding="tns:Service1Soap12"> <soap12:address location="http://localhost/myWebService/Service1.asmx" /> </wsdl:port> </wsdl:service> </wsdl:definitions> Примитивная 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.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.1 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://localhost/myWebServices/convertRub2Euro" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <convertRub2Euro xmlns="http://localhost/myWebServices"> <num>double</num> <kurs>double</kurs> </convertRub2Euro> </soap:Body> </soap:Envelope> HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <convertRub2EuroResponse xmlns="http://localhost/myWebServices"> <convertRub2EuroResult>string</convertRub2EuroResult> </convertRub2EuroResponse> </soap:Body> </soap:Envelope>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.1 Host: localhost Content-Type: application/x-www-form-urlencoded Content-Length: length num=string&kurs=string HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length <?xml version="1.0" encoding="utf-8"?> <string xmlns="http://localhost/myWebServices">string</string> Введем сумму равную 12 и курс равный 12 в ресультат е после нажатия на кнопку invoke будет выдан результат в виде xml <?xml version="1.0" encoding="utf-8" ?> <string xmlns="http://localhost/myWebServices">144</string> Здесь содержится посчитанный результат и тип данных которые необходимо использовать при работе с ними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(textBox 2.Text)).ToString(); } В результате получим приложение которое будет использовать web Ц службу, а точнее функцию web Ц службы для работы. Так как для примера был выбран достаточно простой вариант задания, это вовсе не значит, что способности web служб ограничиваются подобными возможностями.3.3 Составление отчета лабораторной работы.
Для составления отчета лабораторной работы необходимо предоставить следующие данные и ответить на контрольные вопросы.Лабораторная работа № Тема | Выполнил | ||
Принял | |||
Дата | |||
Оценка |