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


Образец 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. Метод должен оценить аргумент 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. Перейдите к странице https://localhost/ServiceModelSamples/JCTMClientPage.htm (не открывайте страницу JCTMClientPage.htm в веб-обозревателе из каталога проекта).

Bb943479.Important(ru-ru,VS.100).gif Примечание
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).

<диск_установки>:\WF_WCF_Samples

Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.

<диск_установки>:\WF_WCF_Samples\WCF\Extensibility\Ajax\WebContentTypeMapper