Академия Специальных Курсов по Компьютерным Технологиям
    Главная страница Послать письмо
 
AskIt.ru  
   
   
   
   
   
   
 
 
  Главная / Заказные курсы / Разработка Web-приложений ASP.NET 2.0 в Visual Studio.NET 2005
 
 

Получить учебные материалы по этому курсу


<-- Назад Читать дальше -->

13. Создание и применение XML Web-служб

Web-службы в приложениях ASP.NET 2.0, преимущества, файлы DISCO и WSDL

Мы уже умеем предоставлять данные пользователям через Web-страницы, однако иногда возникает необходимость предоставлять данные не пользователям, а приложениям. Чтобы передать данные приложениям, используются Web-службы.

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

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

·        независимы от языка программирования. Сами Web-службы можно реализовать на любом языке программирования, и программы, которые обращаются к Web-службам, также можно реализовать на любом языке программирования;

·        основаны на открытых протоколах и стандартах Интернета (HTTP, XML, SOAP);

·        не зависят от платформы, на которой они (или приложения) реализованы;

·        по умолчанию используют stateless service architecture (архитектуру работы со службами без сохранения состояния), которая является более масштабируемой. В ней каждый ответ Web-службы - это новый объект с новым состоянием. Однако вы вполне можете использовать и сохранение состояния (средствами State Management Services) - о них в следующей главе;

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

В самом простом варианте Web-службу можно представить как компонент, методы которого можно вызывать через Web.

Для чего обычно используются Web-службы:

·        запросы аутентификации (пример такой открытой в Интернете Web-службы - Microsoft Passport);

·        службы, которые предоставляют информацию о прогнозах погоды для Web-сайтов;

·        информация по курсам валют;

·        информация о ценах на билеты (например, авиа);

·        цены на акции;

·        бронирование мест в гостиницах;

·        отслеживание прохождения заказа;

·        передача заголовков новостей

и многое другое.

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

Общий принцип работы с Web-службой выглядит так:

·        разработчик создает Web-службу;

·        разработчик помещает описание Web-службы в стандартном формате (публикует Web-службу) на специальном Web-сайте UDDI (Universal Description, Discovery and Integration);

·        разработчик клиентского Web-приложения запрашивает Web-сайт UDDI на предмет доступных Web-служб. В ответ возвращается список доступных Web-служб, в формате discovery files (DISCO)

·        он же выбирает нужный ему Web-сайт и через файл DISCO получает информацию об URL Web-службы и местонахождении документа Web Services Description Language (WSDL), в котором содержится вся необходимая информация о взаимодействии со службой;

·        на основе полученного документа WSDL создается прокси-объект для Web-службы. Этот объект позволяет обращаться к Web-службе как к обычному COM-компоненту;

·        прокси объект привязывается к Web-службе;

·        затем этот прокси-объект можно использовать обычным образом, например, на Web-форме.

Подробнее о некоторых моментах. UDDI - специальная спецификации на публикацию информации о Web-службах. Информацию об этой спецификации и списки доступных в Интернете Web-служб доступны по адресам www.uddi.org и uddi.microsoft.com.

Файлы обнаружения (discovery files, DISCO) - это файлы в формате XML, которые содержат ссылки (URL) на ресурсы, обеспечивающие информацию о Web-службе. Эти файлы обеспечивают возможность программного обнаружения Web-служб. Файлы обнаружения бывают двух разновидностей:

·        файлы *.disco - файлы статического обнаружения. Они автоматически генерируются Web-службой, когда к ней обращаются с URL-запросом, который оканчивается на ?DISCO. Пример такого файла:

<?xml version="1.0" ?>

<disco:discovery 

xmlns:disco="http://schemas.xmlsoap.org/disco"

xmlns:wsdl="http://schemas.xmlsoap.org/disco/wsdl">

 <wsdl:contractRef 

 ref="http://MyWebServer/UserName.asmx?WSDL"/>

</disco:discovery>

·        файлы *.vsdisco - файлы динамического обнаружения. Они автоматически генерируются VS.NET при создании ее средствами Web-службы. В нем указываются те каталоги, в которых поиск Web-служб производить не следует:

<?xml version="1.0" encoding="utf-8" ?>

<dynamicDiscovery xmlns="urn:schemas-

dynamicdiscovery:disco.2000-03-17">

     <exclude path="_vti_cnf" />

     <exclude path="_vti_pvt" />

     <exclude path="_vti_log" />

     <exclude path="_vti_script" />

     <exclude path="_vti_txt" />

     <exclude path="Web References" />

</dynamicDiscovery>

Файл WSDL - еще один XML-совместимый файл, который используется программно при создании прокси-класса для взаимодействия с Web-службой. Он содержит информацию о:

·        пути URL к Web-службе;

·        методы и свойства Web-службы;

·        используемые типы данных;

·        поддерживаемые протоколы взаимодействия.

Общий план работы с Web-службами:

1) создаем файл .asmx и определяем в нем пространства имен, классы, свойства и Web-методы Web-службы;

2) указываем, какие методы и свойства будут доступны пользователям через Интернет.

Для проверки функциональности Web-службы можно обратиться к нему напрямую из Web-броузера. Это - не нормальный режим работы Web-службы и применять его следует только для целей тестирования.

Если обратиться из Web-броузера к службе напрямую, то вернется страница описания Web-службы в формате XML, на которой будет информация о всех методах этой Web-службы.

Если вызывать из Web-броузера метод Web-службы, то вернутся возвращаемые этим методом данные (также в формате XML).

На чаще всего Web-службу используют не напрямую, а опосредованно, через Web-форму. Для этого:

1) в проекте создают Web-reference для Web-службы. В результате создается файл *.vb или *.cs с исходным кодом для прокси-объекта, через который будет производиться работа с Web-службой.

2) проект компилится. Одновременно компилится и прокси класс и в виде модуля DLL помещается в каталог /bin.

3) в коде Web-формы создается объект WebReference.

4) вызываются методы Web-службы и возвращаемые ими данные используются на Web-форме.

Несмотря на то, что обращение к Web-службам напрямую в итоге в приложениях не рекомендуется, во время разработки оно используется очень часто (например, для целей тестирования). Про это сейчас и будет рассказано.

При обращении на Web-службу напрямую из броузера обычно вначале надо обратиться на начальную страницу Web-службы (*.asmx). Вам будет сгенерирована страница с списком методов и еще одной ссылкой - на страницу с формальным описанием Web-службы - WSDL contract (предназначенной для обработки программным способом). Нужно щелкнуть по ссылке с именем нужного метода. Откроется еще одна автоматически сгенерированная страница со списком параметров данного метода и полями для ввода значений этих параметров. После того, как все значения будут введены, можно нажать на кнопку Invoke. В ответ вам будет передан результат выполнения этого метода (в формате XML).

А теперь - о программном вызове Web-служб через прокси-класс.

О создании прокси-класса программным образом вам заботиться особо не нужно. Достаточно из графического интерфейса Solution Explorer добавить Web Reference и нужный прокси-класс будет создан автоматически. Для этого нужно щелкнуть правой кнопкой мыши по проекту и в контекстном меню выбрать Add -> Web Reference. Откроется окно, в котором вам будет предложено ввести URL страницы .asmx или wsdl. После того, как вы введете этот адрес, VS.NET автоматически обнаружит все доступные Web-службы и предложит вам выбрать нужную.

Далее можно в коде Web-формы (например, в событийной процедуре для события Page_Load) просто создать требуемый объект прокси-класса:

Dim ProxyGetStocks As New Client1.localhost.Service1

(возможно, вначале нужно будет нажать на F5, чтобы прокси-класс скомпилировался в сборку).

А потом вызываем свойства Web-службы как обычные методы этого объекта:

Label1.Text = ProxyGetStocks.HelloWorld

и при необходимости передаем им параметры.

Для каждого метода Web-службы автоматически генерируются три метода прокси класса:

·        метод, по имени просто совпадающий с методом Web-службы (в нашем случае HelloWorld);

·        метод, Begin_имя_метода (BeginHelloWorld);

·        метод End_имя_метода (EndHelloWorld).

Обе последних разновидности предназначены для вызова/завершения работы метода в асинхронном режиме.

При работе с Web-службой вполне вероятны ошибки следующих видов:

·        служба недоступна;

·        ответа от Web-службы приходится ждать очень долго;

·        в Web-службе произошла внутренняя ошибка (и вместо ожидаемых данных с Web-службы вернулось сообщение об ошибке).

Конечно же, нужно настраивать обработчик ошибок для этих Web-служб.

Как работать с этими ошибками:

Для проблем, связанных с недоступностью Web-служб и тайм-аутами:

·        у создаваемого прокси-класса есть свойство Timeout. Для него можно установить значение (в миллисекундах), наиболее соответствующее вашей ситуации;

·        просто ловить тайм-аутные исключения:

Try

  'call the XML Web service

Catch err As Exception

 Label1.Text = err.Message

End Try

Если проблема - не с тайм-аутом, а Web-службами (например, вы передали недопустимое значение параметра), то нужно работать с объектом SoapException:

Try

  'call your XML Web service

Catch err As SoapException

  Label1.Text = "Unable to process your request"

End Try

Теперь, наконец, речь пойдет о том, как создавать сами Web-службы. При помощи шаблонов, которые есть в VS.NET, создаются они очень просто.

Принципиально работа по созданию Web-службы выглядит так:

·        создаем в VS.NET новый проект на основе шаблона Web Service;

·        добавляем в него функции, которые будут доступны через Web (одна такая функция HelloWorld() уже помещена в шаблон для примера. Чтобы она заработала, достаточно ее раскомментировать;

·        компилилим проект;

·        тестируем его путем прямого доступа из броузера.

После создания проекта Web-службы в проект автоматически помещается файл *.amsx и к нему - страница codebehind (*.asmx.vb или *.asmx.cs). Поскольку графический интерфейс для Web-службы не предусмотрен, на странице *.asmx по умолчанию расположен только служебный тег WebService:

<%@ WebService Language="vb" Codebehind="Service1.asmx.vb" Class="WebService1.Service1" %>

Все содержимое вполне очевидно. Атрибут Class идентифицирует базовый класс, на основе которого будет создан объект Web-службы.

По умолчанию код страницы codebehind тоже очень простой. Если исключить код, сгенерированный дизайнером и некоторые комментарии, то он выглядит так:

Imports System.Web.Services

<WebService(Namespace := "http://tempuri.org/")> _

Public Class Service1

    Inherits System.Web.Services.WebService

'<WebMethod()> Public Function HelloWorld() As String

'   HelloWorld = "Hello World"

' End Function

End Class

Каждую функцию, которая станет открытым для доступа методом Web-службы, нужно пометить тегом <WebMethod()>.

 

 

   
   
   
   
   
   
   
   
   
   
 
<-- Назад Читать дальше -->

Получить учебные материалы по этому курсу


 
© 2004-2008, Академия Специальных Курсов
по Информационным Технологиям
.
Все права защищены.

Разработка NevaStudio
г. Санкт-Петербург, Васильевский остров,
20-я линия, д. 7
Офис 101, 2-й этаж
Телефон: 8(812)922-47-60
E-mail: info@askit.ru