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


Пример 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.

Настройка, сборка и выполнение образца

  1. Убедитесь, что вы выполнили процедуру однократной установки для примеров Windows Communication Foundation.

  2. Создайте решение WebContentTypeMapperSample.sln, как описано в разделе "Создание примеров Windows Communication Foundation".

  3. Перейдите к http://localhost/ServiceModelSamples/JCTMClientPage.htm (не открывайте JCTMClientPage.htm в браузере из каталога проекта).