Общие сведения о модели программирования ВЕБ-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>.