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


Пример "WebContentTypeMapper"

В примере WebContentTypeMapper показано, как сопоставить новые типы контента с форматами текста сообщения Windows Communication Foundation (WCF).

Элемент WebHttpEndpoint подключается к кодировщику веб-сообщений, что позволяет WCF получать JSON, XML или необработанные двоичные сообщения в той же конечной точке. Кодировщик определяет формат текста сообщения, просматривая тип контента HTTP запроса. В этом примере представлен WebContentTypeMapper класс, позволяющий пользователю управлять сопоставлением между типом контента и форматом текста.

WCF предоставляет набор сопоставлений по умолчанию для типов контента. Например, application/json сопоставляется с JSON и text/xml сопоставляется с XML. Любой тип контента, не сопоставленный с JSON или XML, сопоставляется с необработанным двоичным форматом.

В некоторых сценариях (например, API push-стилей) разработчик службы не управляет типом контента, возвращаемым клиентом. Например, клиенты могут возвращать 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, , XmlRawили 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. Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.

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

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