Пример WebContentTypeMapper
В примере WebContentTypeMapper показано, как сопоставить новые типы контента с форматами текста сообщения Windows Communication Foundation (WCF).
Элемент WebHttpEndpoint подключается к кодировщику веб-сообщений, что позволяет WCF получать JSON, XML или необработанные двоичные сообщения в той же конечной точке. Кодировщик определяет формат тела сообщения, просмотрев тип содержимого HTTP запроса. В этом примере показан класс WebContentTypeMapper, который позволяет пользователю управлять сопоставлением типа содержимого и формата тела.
WCF предоставляет набор сопоставлений по умолчанию для типов контента. Например, application/json
сопоставляется с JSON, а text/xml
сопоставляет с XML. Любой тип содержимого, который не сопоставляется с JSON или XML, сопоставляется с необработанным двоичным форматом.
В некоторых сценариях (например, интерфейсы API внедрения) разработчик службы не управляет типом содержимого, возвращаемым клиентом. Например, клиенты могут возвращать JSON как text/javascript
, а не application/json
. В этом случае разработчик службы должен предоставить тип, унаследованный от WebContentTypeMapper, для правильной обработки данного типа содержимого, как показано в следующем образце кода.
public class JsonContentTypeMapper : WebContentTypeMapper
{
public override WebContentFormat
GetMessageFormatForContentType(string contentType)
{
if (contentType == "text/javascript")
{
return WebContentFormat.Json;
}
else
{
return WebContentFormat.Default;
}
}
}
Тип должен переопределить метод GetMessageFormatForContentType(String). Метод должен оценить аргумент contentType
и возвратить одно из следующих значений: Json, Xml, Raw или Default. Возврат Default следует сопоставлениям кодировщика веб-сообщений по умолчанию. В предыдущем примере кода тип содержимого text/javascript
сопоставляется с JSON, а все другие сопоставления остаются неизменными.
Для использования класса JsonContentTypeMapper
воспользуйтесь следующими элементами Web.config:
<system.serviceModel>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" contentTypeMapper="Microsoft.Samples.WebContentTypeMapper.JsonContentTypeMapper, JsonContentTypeMapper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
Чтобы проверить требование к использованию JsonContentTypeMapper, удалите атрибут contentTypeMapper из указанного выше файла конфигурации. Не удается загрузить страницу клиента при попытке использования text/javascript
для отправки содержимого JSON.
Настройка, сборка и выполнение образца
Убедитесь, что вы выполнили процедуру однократной установки для примеров Windows Communication Foundation.
Создайте решение WebContentTypeMapperSample.sln, как описано в разделе "Создание примеров Windows Communication Foundation".
Перейдите к
http://localhost/ServiceModelSamples/JCTMClientPage.htm
(не открывайте JCTMClientPage.htm в браузере из каталога проекта).