Опубликован: 15.06.2011 | Доступ: свободный | Студентов: 708 / 59 | Оценка: 4.25 / 4.00 | Длительность: 14:09:00
Лекция 12:

Consuming Web Services with WCF

Аннотация: Материал по части WCF взят из книги Основы Windows Communication Foundation для .NET Framework 3.5 Стив Резник, Ричард Крейн, Крис Боуэн.

Windows Communication Foundation

Windows Communication Foundation (WCF) – это унифицированная модель программирования распределенных приложений на платформе Microsoft. Она инкорпорирует предшествующие технологии – ASMX, .NET Remoting, DCOM и MSMQ – и предоставляет расширяемый API, отвечающий разнообразным требованиям, которые возникают при создании распределенных систем. До WCF вам приходилось овладевать всеми этими технологиями, чтобы выбрать ту, которая лучше всего подходит в конкретной ситуации. WCF упрощает задачу, предлагая единообразный подход.

В современных распределенных приложениях чаще всего применяются Web-службы на основе XML. С их помощью реализуются разнообразные технические и бизнес функции, как в закрытых, так и в открытых сетях. Иногда при этом используется спецификация SOAP, иногда – нет. Обычно информация передается в виде текстовых документов, размеченных с помощью тегов в угловых скобках, но это необязательно. Как правило, в качестве транспортного протокола выбирается HTTP, но опять же не всегда. WCF – это каркас для работы с Web службами на основе XML, который совместим со многими другими технологиями.

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

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

Обмен данными между клиентом и службой

Рис. 23.1. Обмен данными между клиентом и службой

Как показано на рис. 23.2, WCF служба может состоять из нескольких оконечных точек, каждая из которых описывается собственным адресом, привязкой и контрактом. Поскольку поток сообщений обычно двунаправленный, клиенты неявно также оказываются контейнерами оконечных точек.

Коммуникация между оконечными точками клиента и службы

Рис. 23.2. Коммуникация между оконечными точками клиента и службы

Оконечная точка службы не может отвечать на сообщения, если служба не размещена в каком-нибудь работающем процессе операционной системы. Владельцем службы может быть любой процесс, например, работающее без присмотра человека серверное приложение, Web сервер и даже клиентская программа, представленная полноценным окном на экране ПК или значком в системном лотке Windows. Для служб можно определить поведения, управляющие степенью параллелизма, ограничением пропускной способности, транзакционной целостностью, безопасностью и другими семантическими аспектами. Поведения можно реализовать с помощью атрибутов .NET, путем манипулирования исполняющей средой WCF или в конфигурационных файлах. В сочетании с гибкой моделью размещения поведения заметно упрощают написание многопоточного кода.

Как показано на рис. 23.3, главная программа может создать экземпляр класса ServiceHost, который будет отвечать за создание оконечных точек службы.

Размещение службы

Рис. 23.3. Размещение службы

Службы данных WCF (Silverlight)

Silverlight включает клиентскую библиотеку сред. Службы данных WCF, которая позволяет получить доступ к данным из любой службы, предоставляющей доступ к веб-каналу Open Data Protocol (OData). OData основывается на сущности и модели связи, которая позволяет получать доступ к данным в стиле ресурсов переноса репрезентативного состояния (REST). Приложения на базе Silverlight могут получить доступ к этим данным через стандартный протокол HTTP для выполнения запросов и даже для создания, обновления и удаления данных в службе данных.

Службы данных WCF, компонент .NET Framework, позволяет легко реализовывать службу данных для предоставления веб-канала OData в приложении .NET Framework. сред. Службы данных WCF поддерживает полный набор функциональных возможностей OData для обнаружения, создания запросов и обновления данных в службе данных.

Создание WCF сервиса

Всего имеется 4 шаблона, через которые можно реализовать веб-сервисы:

  • Silverlight-enabled WCF Service. Этот шаблон создает веб-службу, которая предоставляет данные клиенту Silverlight или внешнему интерфейсу. Шаблон может быть добавлен на веб-сайт или в проект веб-приложения для создания службы WCF, которая включает код и конфигурацию службы, поддерживающей взаимодействие с клиентом Silverlight.
  • AJAX - enabled WCF Service. Этот шаблон предоставляет элемент управления AJAX как службу WCF.
  • WCF Service Application. Это пользовательский шаблон, который предоставляет быстрый способ для добавления служб WCF в существующие проекты Visual Studio.
  • Web Service. Шаблон обычного веб-сервиса.

В Silverlight - приложение добавляется файл Silverlight-enabled WCF Service ( Рис 23.4). Файл будет иметь расширение svc.

Добавление WCF сервиса к Silverlight проекту

увеличить изображение
Рис. 23.4. Добавление WCF сервиса к Silverlight проекту

В файле сгенерируется код. Атрибут [OperationContract] своего рода разделитель для методов в сервисе, при добавлении очередного метода, необходимо добавлять данный атрибут:

namespace SimpleSilverlightWCFService.Web
{
    [ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode = 
                   AspNetCompatibilityRequirementsMode.Allowed)]
    public class HelloWorld
    {
        [OperationContract]
        public string TestMethod()
        {
            return "Hello World";
        }

    }
}

Поскольку режим совместимости ASP.NET подразумевает семантику обработки запросов, существенно отличающуюся от WCF по умолчанию, в реализации отдельных служб имеется возможность управления тем, выполняются ли они внутри приложения, для которого включен режим совместимости ASP.NET. Службы могут использовать атрибут AspNetCompatibilityRequirements для указания, поддерживают ли они режим совместимости ASP.NET.

Таблица 23.1. Взаимодействие параметра режима совместимости на уровне приложения с заданным уровнем поддержки отдельной службы
Параметр режима совместимости на уровне приложения [AspNetCompatibilityRequirementsMode] Параметр Полученный результат
aspNetCompatibilityEnabled = "true" Required Служба включается успешно.
aspNetCompatibilityEnabled = "true" Allowed Служба включается успешно.
aspNetCompatibilityEnabled = "true" NotAllowed При получении службой сообщения возникает ошибка активации.
aspNetCompatibilityEnabled = "false" Required При получении службой сообщения возникает ошибка активации.
aspNetCompatibilityEnabled = "false" Allowed Служба включается успешно.
aspNetCompatibilityEnabled = "false" NotAllowed Служба включается успешно.

В проекте Silverlight добавляем ссылку на сервис. В открывшемся окне (Рис 23.5) необходимо выбрать нужные сервисы. VS автоматически создаст ServiceReferences.ClientConfig, в котором находятся настройки привязки сервиса.

Добавление ссылки на созданный сервис

Рис. 23.5. Добавление ссылки на созданный сервис

Файл Web.config, так же претерпит изменение:

<services>
  <service name="SimpleSilverlightWCFService.Web.HelloWorld">
    <endpoint address="" binding="customBinding"
      bindingConfiguration="SimpleSilverlightWCFService.Web.HelloWorld.customBinding0"
      contract="SimpleSilverlightWCFService.Web.HelloWorld" />
    <endpoint address="mex" binding="mexHttpBinding" 
      contract="IMetadataExchange" />
  </service>
</services>

Большинство методов в службах Windows Communication Foundation (WCF) может быть вызвано как синхронно, так и асинхронно. Асинхронный вызов метода позволяет приложению работать во время выполнения этого вызова через медленное соединение. Пример асинхронного вызова реализован во фрагменте кода:

public partial class MainPage : UserControl
{
  public MainPage()
  {
    InitializeComponent();
    ServiceReference.HelloWorldClient client = new ServiceReference.HelloWorldClient();
    client.TestMethodCompleted += new EventHandler<ServiceReference.
          TestMethodCompletedEventArgs>(client_TestMethodCompleted);
    client.TestMethodAsync();

  }
  void client_TestMethodCompleted(object sender, 
       ServiceReference.TestMethodCompletedEventArgs e)
  {
    MessageBox.Show(e.Result);
  }
    
  }
}

При запуске приложения откроется окно браузера, где выполнится метод, который реализован в WCF сервисе ( Рис 23.6).

Результат работы сервиса

увеличить изображение
Рис. 23.6. Результат работы сервиса

Дополнительные материалы

  1. http://msdn.microsoft.com/ru-ru/library/bb907578.aspx (Службы Windows Communication Foundation и службы данных WCF в Visual Studio)
  2. http://habrahabr.ru/blogs/silverlight/99464/ (Создание и настройка WCF сервиса в Silverlight 4 приложении пошаговое руководство)