Поделиться через


Объектная модель программирования WCF Web HTTP

Модель программирования WCF WEB HTTP позволяет разработчикам предоставлять доступ к веб-службам Windows Communication Foundation (WCF) через базовые HTTP-запросы, не требуя использования SOAP. Модель программирования WCF WEB HTTP построена на базе существующей модели расширяемости WCF. Она определяет следующие классы.

Модель программирования:

Инфраструктура каналов и диспетчера:

Точки расширяемости классов Utility:

AspNetCacheProfileAttribute

AspNetCacheProfileAttribute при применении к операции службы указывает профиль кэша вывода ASP.NET в файле конфигурации, который следует использовать в кэшировании ответов для операции в кэше вывода ASP .NET. Это свойство принимает только один параметр, имя профиля кэша, указывающее настройки кэша в файле конфигурации.

WebGetAttribute

Атрибут WebGetAttribute служит для пометки операций служб, отвечающих на HTTP-запросы GET. Это пассивное поведение операции (методы IOperationBehavior не выполняют никаких действий), добавляющее метаданные в описание операции. Применение атрибута WebGetAttribute не имеет последствий, если в коллекцию поведений службы не добавлено поведение, выполняющее поиск этих метаданных в описании операции (например, WebHttpBehavior). Атрибут WebGetAttribute принимает необязательные параметры, показанные в следующей таблице.

Параметр Описание

BodyStyle

Определяет, нужно ли заключать в оболочку запросы и ответы операции службы, к которой относится атрибут.

RequestFormat

Определяет, каким образом форматируются сообщения запросов.

ResponseFormat

Определяет, каким образом форматируются сообщения ответов.

UriTemplate

Задает шаблон универсального кода ресурса (URI), который определяет, какие запросы HTTP сопоставляются с операцией службы, к которой относится атрибут.

WebHttpBinding

Класс WebHttpBinding включает поддержку форматов XML, JSON и необработанных двоичных данных, используя для этого элемент WebMessageEncodingBindingElement. Он состоит из элементов HttpsTransportBindingElement и HttpTransportBindingElement, а также объекта WebHttpSecurity. Привязка WebHttpBinding предназначена для использования с поведением WebHttpBehavior.

WebInvokeAttribute

Атрибут WebInvokeAttribute похож на атрибут WebGetAttribute, но он служит для пометки операций служб, которые отвечают на HTTP-запросы, отличные от GET. Это пассивное поведение операции (методы IOperationBehavior не выполняют никаких действий), добавляющее метаданные в описание операции. Применение атрибута WebInvokeAttribute не имеет последствий, если в коллекцию поведений службы не добавлено поведение, выполняющее поиск этих метаданных в описании операции (например, WebHttpBehavior).

Атрибут WebInvokeAttribute принимает необязательные параметры, показанные в следующей таблице.

Параметр Описание

BodyStyle

Определяет, нужно ли заключать в оболочку запросы и ответы операции службы, к которой относится атрибут.

Method

Задает метод HTTP, которому сопоставлена операция службы.

RequestFormat

Определяет, каким образом форматируются сообщения запросов.

ResponseFormat

Определяет, каким образом форматируются сообщения ответов.

UriTemplate

Задает шаблон универсального кода ресурса (URI), который определяет, какие запросы GET сопоставляются с операцией службы, к которой относится атрибут.

UriTemplate

Класс UriTemplate позволяет определить набор кодов URI с одинаковой структурой. Шаблоны состоят из двух частей: путь и запрос. Путь состоит из серии сегментов, разделенных косой чертой (/). Каждый сегмент может иметь литеральное значение, значение переменной (заключенное в фигурные скобки [{ }]), которое должно в точности совпадать с содержимым одного сегмента, или подстановочный знак (звездочка [*]), который ставится в конце пути и означает «оставшуюся часть пути». Выражение запроса можно полностью опустить. Если оно указано, оно задает неупорядоченную серию пар «имя-значение». Элементами выражения запроса могут быть либо литеральные пары (?x=2), либо пары переменных (?x={value}). Непарные значения не допускаются. UriTemplate является внутренним классом модели программирования WCF WEB HTTP, предназначенным для сопоставления отдельных URI или их групп с операциями службы.

UriTemplateTable

Класс UriTemplateTable представляет собой ассоциативный набор объектов UriTemplate, привязанных к объекту, выбранному разработчиком. Он позволяет сопоставлять потенциальные универсальные коды ресурсов (URI) с шаблонами в наборе и получать данные, связанные с совпадающими шаблонами. UriTemplateTable является внутренним классом модели программирования WCF WEB HTTP, предназначенным для сопоставления отдельных URI или их групп с операциями службы.

WebServiceHost

WebServiceHost расширяет ServiceHost, чтобы было проще размещать веб-службы, не использующие протокол SOAP. Если объект WebServiceHost не обнаруживает конечные точки в описании службы, он автоматически создает конечную точку по умолчанию по базовому адресу службы. При создании конечной точки HTTP по умолчанию WebServiceHost также отключает страницу справки HTTP и функцию GET языка WSDL, чтобы конечная точка метаданных не мешала конечной точке HTTP по умолчанию. WebServiceHost также проверяет, что ко всем конечным точкам, использующим привязку WebHttpBinding, прикреплено нужное поведение WebHttpBehavior. Наконец WebServiceHost автоматически настраивает привязку конечной точки для работы со связанными параметрами безопасности IIS при использовании в защищенном виртуальном каталоге.

WebServiceHostFactory

Класс WebServiceHostFactory служит для динамического создания объектов WebServiceHost, когда служба размещается в службах IIS или в службе активации Windows (WAS). В отличие от служб с резидентным размещением, когда экземпляры WebServiceHost создаются размещающим приложением, службы, размещенные в IIS или WAS, используют для создания объектов WebServiceHost этот класс. Метод CreateServiceHost вызывается при получении входящего запроса к службе.

WebHttpBehavior

Класс WebHttpBehavior предоставляет необходимые модули форматирования, селекторы операций и другие объекты, необходимые для поддержки веб-служб на уровне модели службы. Все это реализуется в форме поведения конечной точки (используется совместно с WebHttpBinding) и позволяет задавать модули форматирования и селекторы для каждой конкретной точки, в результате чего одна реализация службы может быть представлена конечными точками SOAP и POX одновременно.

Расширение WebHttpBehavior

Класс WebHttpBehavior можно расширить с помощью нескольких виртуальных методов: GetOperationSelector, GetReplyClientFormatter, GetRequestClientFormatter, GetReplyDispatchFormatter и GetRequestDispatchFormatter. Разработчики могут создать производный класс для WebHttpBehavior и переопределить эти методы, чтобы изменить поведение по умолчанию.

Поведение WebScriptEnablingBehavior является примером расширения класса WebHttpBehavior. Класс WebScriptEnablingBehavior позволяет конечным точкам Windows Communication Foundation (WCF) получать HTTP-запросы от клиента ASP.NET AJAX на основе веб-обозревателя. Служба AJAX с использованием HTTP POST — это пример использования этой точки расширяемости.

Bb412204.Warning(ru-ru,VS.100).gif Внимание!
При использовании WebScriptEnablingBehaviorUriTemplate не поддерживаются внутри атрибутов WebGetAttribute или WebInvokeAttribute.

WebHttpDispatchOperationSelector

Класс WebHttpDispatchOperationSelector использует классы UriTemplate и UriTemplateTable для распределения вызовов по операциям службы.

Совместимость

Модель программирования WCF WEB HTTP не использует сообщения SOAP и поэтому не поддерживает протоколы WS-*. Тем не менее один контракт можно представить двумя различными конечными точками, одна из которых будет использовать протокол SOAP, а другая не будет. Пример см. в разделе Как предоставить контракты SOAP- и веб-клиентам.

Безопасность

Поскольку модель программирования WCF WEB HTTP не поддерживает протоколы WS-*, единственным способом защиты веб-службы, построенной по модели WCF WEB HTTP, является предоставление доступа к ней через SSL. Дополнительные сведения о настройке SSL с IIS 7.0 см. в разделе Как реализовать SSL в службах IIS (на английском языке).

См. также

Справочник

WebHttpBinding
WebGetAttribute
WebInvokeAttribute
WebHttpBehavior
WebHttpDispatchOperationSelector

Основные понятия

Общие сведения о модели программирования WCF Web HTTP