Программирование HTTP с использованием WCF - Привязка и размещение

ОГЛАВЛЕНИЕ

Привязка и размещение

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

В WCF в среде .NET Framework 3.0 введена концепция привязки, являющейся обобщением транспортного средства и протоколов конечной точки. .NET Framework 3.0 поставляется с несколькими привязками, в которые входит поддержка выбора из широкого набора транспортных средств и протоколов.

В WCF в среде .NET Framework 3.5 включена привязка с именем System.ServiceModel.WebHttpBinding. Эта привязка является обобщением принципов Интернета, и она следует той же модели использования, что и типы привязок в среде .NET Framework 3.0, поэтому ее можно добавить к конечной точке, как и любую другую привязку.

В WCF в среде .NET Framework 3.0 появилась также концепция поведения конечной точки. Под поведением понимается способ расширения пути выполнения в инфраструктуре системы обмена сообщениями. Несколько поведений поставляется с .NET Framework, кроме этого, несложно создать свое собственное.

В WCF в среде .NET Framework 3.5 включено поведение конечной точки с именем System.ServiceModel.Description.WebHttpBehavior. Это поведение выполняет несколько задач. Для принимающих приложений оно устанавливает фильтрующую инфраструктуру с целью обеспечения, среди прочего, доставки полученных сообщений соответствующему методу объекта службы. В .NET Framework 3.0 среда WCF использовала в качестве ключа доставки сочетание действия SOAP и адреса назначения. Механизм фильтрации, настроенный WebHttpBehavior, расширяет существующие механизмы фильтрации с целью отключения совпадений UriTemplate и глаголов HTTP.

На рис. 4 показан способ использования WebHttpBinding и WebHttpBehavior для создания принимающего приложения, охватывающего все принципы Интернета. Преимуществом этого подхода является возможность добавления одной из этих конечных точек к существующему ServiceHost и за счет этого получения одного ServiceHost, обладающего как конечными точками SOAP/WS-*, так и конечными точками REST.

Рис. 4 Using WebHttpBinding and WebHttpBehavior

ServiceHost host = new ServiceHost(typeof(IPictureContract), 
  new Uri("http://localhost:5000"));
// instantiate a WebHttpBinding
WebHttpBinding binding = new WebHttpBinding();

// add an endpoint, using the WebHttpBinding
ServiceEndpoint ep = host.AddServiceEndpoint(
  typeof(IPictureContract), binding, String.Empty);

// add the WebHttpBehavior to the endpoint
ep.Behaviors.Add(new WebHttpBehavior());

// open the ServiceHost to start listening
host.Open(); 

Отправляющие приложения следуют этой же модели использования, но WebHttpBehavior следует добавить к коллекции поведений конечных точек объекта ChannelFactory<T>. Что касается обычной методики WCF, эти возможности доступны также в файлах настройки.

WCF в среде .NET Framework 3.5 развивает дальше эту модель удобного использования, чтобы в некоторых случаях избавиться от необходимости добавления WebHttpBinding или WebHttpBehavior. В новый интерфейс API включено два типа, служащих этой цели: System.ServiceModel.Web.WebServiceHost и System.ServiceModel.Web.WebServiceHostFactory. Тип WebServiceHost автоматически добавляет WebHttpBehavior ко всем конечным точкам и на этапе выполнения проводит некоторую дополнительную проверку с целью обеспечения совместимости всех конечных точек с этим поведением. Это устраняет этап добавления WebHttpBehavior к конечной точке.

Тип WebServiceHostFactory был разработан для использования в случаях размещения в IIS, чтобы избавиться от необходимости в каком-либо файле настройки или императивном файле, содержащем информацию о размещении. В WCF в среде .NET Framework 3.0 в качестве цели активации для размещения служб WCF в IIS введен файл .svc. Эти файлы содержат директивы, которые выглядят подобно директивам страниц в ASP.NET. Добавлением WebServiceHostFactory к свойству Factory директивы файла .svc создается ServiceHost, добавляется конечная точка, использующая соответствующий контракт с WebHttpBinding, добавляется WebHttpBehavior к конечной точке и открывается ServiceHost:

<%@ ServiceHost 
  Language="C#" 
  Service="PictureService" 
  Factory="System.ServiceModel.Web.WebServiceHostFactory" %>

В файле web.config для этой службы не содержатся никакие относящиеся к WCF записи.