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


Общие сведения о модели программирования ВЕБ-HTTP WCF

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

  • URI и обработка URI URI играют центральную роль в разработке веб-сервисов HTTP. Модель программирования WCF WEB HTTP использует UriTemplate и UriTemplateTable классы для предоставления возможностей обработки URI.

  • Поддержка операций GET и POST Веб-службы HTTP используют команду GET для извлечения данных, а также различные команды обращения для изменения данных и удаленного вызова. Модель программирования WCF WEB HTTP использует WebGetAttribute и WebInvokeAttribute для связывания операций службы с командами GET и другими HTTP-командами, такими как PUT, POST и DELETE.

  • Множество форматов данных В веб-службах обрабатывают разнообразные типы данных в дополнение к сообщениям SOAP. Модель программирования WCF WEB HTTP использует WebHttpBinding и WebHttpBehavior для поддержки различных форматов данных, включая XML-документы, объект данных JSON и потоки двоичного содержимого, такие как изображения, видеофайлы или обычный текст.

Модель программирования WCF WEB HTTP расширяет охват WCF для покрытия сценариев веб-стиля, которые включают веб-службы HTTP, службы AJAX и JSON и веб-каналы Syndication (ATOM/RSS). Дополнительные сведения о службах AJAX и JSON см. об интеграции AJAX и поддержке JSON в . Дополнительные сведения о синдикации см. в обзоре синдикации WCF.

Нет дополнительных ограничений на типы данных, которые могут быть возвращены из веб-службы HTTP. Любой сериализуемый тип можно вернуть из операции веб-службы HTTP. Так как операции веб-службы HTTP могут вызываться веб-браузером, существует ограничение на то, какие типы данных можно указать в URL-адресе. Дополнительные сведения о типах, поддерживаемых по умолчанию, см. в разделе UriTemplate параметры строки запроса и URL-адреса см. ниже. Поведение по умолчанию можно изменить, предоставив собственную реализацию T:System.ServiceModel.Dispatcher.QueryStringConverter, которая указывает, как преобразовать параметры, указанные в URL-адресе, в фактический тип параметра. Дополнительные сведения см. в QueryStringConverter

Осторожность

Службы, написанные с помощью модели программирования WCF WEB HTTP, не используют сообщения SOAP. Так как ПРОТОКОЛ SOAP не используется, нельзя использовать функции безопасности, предоставляемые WCF. Тем не менее, вы можете использовать транспортную безопасность, размещая службу с помощью HTTPS. Дополнительные сведения о безопасности WCF см. в разделе «Обзор безопасности».

Предупреждение

Установка расширения WebDAV для IIS может привести к тому, что HTTP-службы вернут ошибку HTTP 405, поскольку расширение WebDAV пытается обрабатывать все запросы PUT. Чтобы обойти эту проблему, можно удалить расширение WebDAV или отключить расширение WebDAV для веб-сайта. Дополнительные сведения см. в IIS и WebDav.

Обработка URI с помощью UriTemplate и UriTemplateTable

Шаблоны URI предоставляют эффективный синтаксис для выражения больших наборов структурны похожих URI. Например, следующий шаблон выражает набор всех трех сегментов URI, которые начинаются с "a" и заканчиваются "c" без учета значения промежуточного сегмента: a/{segment}/c

Этот шаблон описывает URI, как показано ниже.

  • a/x/c

  • a/y/c

  • a/z/c

  • и т. д.

В этом шаблоне фигурная скобка ("{сегмент}") указывает сегмент переменной вместо литерального значения.

Платформа .NET Framework предоставляет API для работы с шаблонами URI с именем UriTemplate. UriTemplates позволяют выполнять следующие действия:

  • Можно вызвать один из методов Bind с набором параметров, чтобы создать полностью закрытый URI, соответствующий шаблону. Это означает, что все переменные в шаблоне URI заменяются фактическими значениями.

  • Вы можете вызвать Match() с URI кандидата, который использует шаблон для разбиения URI кандидата в составные части и возвращает словарь, содержащий различные части URI, помеченные в соответствии с переменными в шаблоне.

  • Bind() и Match() являются обратными, так что вы можете вызвать Match( Bind(x) ) и вернуться к той же среде, с которой началось.

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

Модель службы WCF использует UriTemplate и UriTemplateTable для связывания операций службы с набором URI, описанных UriTemplate. Операция службы связана с UriTemplateпри использовании WebGetAttribute или WebInvokeAttribute. Дополнительную информацию о UriTemplate и UriTemplateTableсм. в разделе UriTemplate и UriTemplateTable.

Атрибуты WebGet и WebInvoke

Службы WCF WEB HTTP используют глаголы получения (например, HTTP GET) в дополнение к различным глаголам вызова (например, HTTP POST, PUT и DELETE). Модель программирования WCF WEB HTTP позволяет разработчикам служб контролировать как шаблон URI, так и глагол, связанный с операциями их службы с WebGetAttribute и WebInvokeAttribute. WebGetAttribute и WebInvokeAttribute позволяют управлять привязкой отдельных операций к URI и методам HTTP, связанным с этими URI. Например, добавление WebGetAttribute и WebInvokeAttribute в следующем коде.

[ServiceContract]
interface ICustomer
{
  //"View It"

  [WebGet]
  Customer GetCustomer():

  //"Do It"
    [WebInvoke]
  Customer UpdateCustomerName( string id,
                               string newName );
}

Приведенный выше код позволяет выполнять следующие HTTP-запросы.

GET /GetCustomer

POST /UpdateCustomerName

WebInvokeAttribute по умолчанию выполняет POST, но вы можете использовать его для других глаголов.

[ServiceContract]
interface ICustomer
{
  //"View It" -> HTTP GET
    [WebGet( UriTemplate="customers/{id}" )]
  Customer GetCustomer( string id ):

  //"Do It" -> HTTP PUT
  [WebInvoke( UriTemplate="customers/{id}", Method="PUT" )]
  Customer UpdateCustomer( string id, Customer newCustomer );
}

Полный пример службы WCF, использующего модель программирования WCF WEB HTTP, см. в разделе Практическое руководство. Создание базовой веб-службы WCF web HTTP.

Параметры и URL-адреса строки запроса UriTemplate

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

Тип Формат
Byte 0 - 255
SByte -128 - 127
Int16 -32768 - 32767
Int32 -2,147,483,648 - 2,147,483,647
Int64 -9,223,372,036,854,775,808 - 9,223,372,036,854,775,807
UInt16 0 - 65535
UInt32 0 - 4,294,967,295
UInt64 0 - 18,446,744,073,709,551,615
Single -3.402823e38 - 3.402823e38 (экспоненциальная нотация не требуется)
Double -1.79769313486232e308 - 1.79769313486232e308 (экспонентная нотация не требуется)
Char Любой один символ
Decimal Любой десятичный знак в стандартной нотации (без экспоненты)
Boolean Истина или Ложь (без учета регистра)
String Любая строка (пустая строка не поддерживается, и экранирование не выполняется)
DateTime ММ/ДД/ГГГГ

MM/DD/ГГГГ ЧЧ:ММ:SS [AM|PM]

Месяц День Год

Год месяца HH:MM:SS [AM|PM]
TimeSpan DD.HH:MM:SS

Where DD = Days, HH = Hours, MM = minutes, SS = Секунды
Guid Например, GUID:

936DA01F-9ABD-4d9d-80C7-02AF85C822A8
DateTimeOffset ММ/ДД/ГГГГ ЧЧ:ММ:СС ММ:СС

Where DD = Days, HH = Hours, MM = minutes, SS = Секунды
Перечисления Например, значение перечисления, определяющее перечисление, как показано в следующем коде.

public enum Days{ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };

Любой из отдельных значений перечисления (или соответствующих целых значений) может быть указан в строке запроса.
Типы, имеющие TypeConverterAttribute и способные преобразовывать тип в строковое представление и обратно. Зависит от преобразователя типов.

Форматы и модель программирования WCF WEB HTTP

Модель программирования WCF WEB HTTP имеет новые возможности для работы с различными форматами данных. На уровне привязки WebHttpBinding может считывать и записывать следующие различные виды данных:

  • XML
  • JSON
  • Непрозрачные двоичные потоки

Это означает, что модель программирования WCF WEB HTTP может обрабатывать любые типы данных, но вы можете столкнуться с проблемами при программировании с использованием Stream.

Платформа .NET Framework 3.5 поддерживает данные JSON (AJAX), а также каналы синдикации (включая ATOM и RSS). Дополнительные сведения об этих функциях см. в разделе Форматирование WCF Web HTTP, в разделе Обзор WCF Syndicationи в разделе Интеграция AJAX и поддержка JSON.

Модель программирования и безопасность WCF WEB HTTP

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

Устранение неполадок модели программирования WCF WEB HTTP

При вызове служб WCF WEB HTTP с помощью ChannelFactoryBase<TChannel> для создания канала WebHttpBehavior используется EndpointAddress набор в файле конфигурации, даже если другой EndpointAddress передается в ChannelFactoryBase<TChannel>.

См. также