Спонсор: Microsoft
Опубликован: 01.03.2010 | Доступ: свободный | Студентов: 941 / 39 | Оценка: 4.38 / 4.31 | Длительность: 09:26:00
Лекция 3:

Работа вне браузера и с web-сервисами

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >

Работа Silverlight с web сервисами

Существует 2 подхода к созданию веб-сервисов. В случае подхода SOAP (Simple Object Access Protocol) сервер выставляет клиенту контракт, в котором указаны параметры, методы, которые клиент может вызвать из приложения. Вся работа осуществляется веб-сервисом, а клиенту передается результат работы сервиса. SOAP предоставляет способ коммуникации между приложениями, работающими под управлением различных операционных систем, на основе различных технологий и языков программирования. SOAP - ключевой элемент архитектуры .NET компании Microsoft, предназначенной для разработки интернет приложений. Примерами SOAP являются WCF, ASMX веб-сервисы. Веб-сервис имеет адрес URL, по которому клиент к нему подключается, используя протокол HTTP.

Подход REST (Representational State Transfer) сфокусирован на данных. Здесь клиент запрашивает исключительно данные, а сервер является их хранителем. В REST-сервисах акцент сделан на доступ к ресурсам, а не на исполнение удаленных сервисов; в этом их кардинальное отличие от SOAP-сервисов. Если SOAP-клиенты запрашивают выполнение действия на сервере, то REST-клиенты попросту требуют сам ресурс. Например, вместо того чтобы запрашивать удаленное исполнение функции для нахождения нужного вам формуляра заказа, вы просто запрашиваете этот формуляр, примерно так же, как статичную Web-страницу. Примеры: WCF REST, ADO.NET Data Services. Например, в Интернете имеется доступный веб-сервис интернет магазина. По URL делается запрос к нему. В запросе требуется вывести список ноутбуков, имеющихся в продаже. http://shopping.yahooapis.com/ShoppingService/v3/productSearch?appid=YahooDemo&query=notebook&show_numratings=1 - запрос. Ответом будет XML файл следующего содержания:

<?xml version="1.0" encoding="utf-8"?>
<ProductSearch xmlns="urn:yahoo:prods" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="urn:yahoo:prods 
          http://shopping.yahooapis.com/shoppingservice/v3/productsearch.xsd">
…
<Refinement name="Brand" 
               totalAvailable="26" 
               totalValues="10">
<RefineValue>
  <Title>Dell</Title>
  <Value>4168-Brand=Dell</Value>
  <Category>Laptops</Category>
  <NumberOfProducts>1778</NumberOfProducts>
</RefineValue>
…

В ответе содержится число ноутбуков, и список, с указанием производителя, марки, количества штук в наличие. Далее

Подключение приложения Silverlight к веб-сервису SOAP

Для того чтобы создать приложение Silverlight, работающее с веб-сервисом SOAP, необходимо реализовать сам веб-сервис, выполняющий какие-то функции. Затем, проектируя приложение Silverlight, в Visual Studio добавляем ссылку на веб-сервис "Add Service Reference". Это делается в проекте веб сайта (хоста), на котором будет отображаться работающее приложение Silverlight. Visual Studio автоматически подключится к веб-сервису и сгенерирует прокси-класс, методы которого становятся доступными при программировании. Эти методы можно вызывать из приложения асинхронно.

Создание веб-сервиса

Рис. 3.21. Создание веб-сервиса
Добавление веб-сервиса в приложение Silverlight

Рис. 3.22. Добавление веб-сервиса в приложение Silverlight

Ниже представлен код C# для веб-сервиса:

public class Service1
{
  [OperationContract]
  public string CourseName()
  {
    return "Методика создания интерактивных приложений с 
                 использованием технологии Silverlight";
  }
}

Ниже представлен код для асинхронного вызова веб-сервиса и его метода, который возвращает название данного курса.

ServiceReference1.Service1Client client = 
    new SilverlightApplication1.ServiceReference1.Service1Client();
client.CourseNameCompleted += 
    new EventHandler<ServiceReference1.CourseNameCompletedEventArgs>
                                              (client_CourseNameCompleted);
client.CourseNameAsync();

void client_CourseNameCompleted(object sender, 
                       ServiceReference1.CourseNameCompletedEventArgs e)
{
  string str = "Название курса: " + e.Result;
}
< Лекция 2 || Лекция 3: 123456 || Лекция 4 >