Exemplo de WebContentTypeMapper

O exemplo WebContentTypeMapper demonstra como mapear novos tipos de conteúdo para formatos de corpo de mensagem do Windows Communication Foundation (WCF).

O WebHttpEndpoint elemento conecta o codificador de mensagens da Web, que permite que o WCF receba mensagens binárias JSON, XML ou brutas no mesmo ponto de extremidade. O codificador determina o formato do corpo da mensagem examinando o tipo de conteúdo HTTP da solicitação. Este exemplo apresenta a WebContentTypeMapper classe, que permite ao usuário controlar o mapeamento entre o tipo de conteúdo e o formato do corpo.

O WCF fornece um conjunto de mapeamentos padrão para tipos de conteúdo. Por exemplo, application/json mapeia para JSON e text/xml mapeia para XML. Qualquer tipo de conteúdo que não seja mapeado para JSON ou XML é mapeado para o formato binário bruto.

Em alguns cenários (por exemplo, APIs no estilo push), o desenvolvedor do serviço não controla o tipo de conteúdo retornado pelo cliente. Por exemplo, os clientes podem retornar JSON como text/javascript em vez de application/json. Nesse caso, o desenvolvedor de serviço deve fornecer um tipo que deriva de para manipular o tipo de conteúdo fornecido corretamente, conforme mostrado no código de WebContentTypeMapper exemplo a seguir.

public class JsonContentTypeMapper : WebContentTypeMapper
{
    public override WebContentFormat
               GetMessageFormatForContentType(string contentType)
    {
        if (contentType == "text/javascript")
        {
            return WebContentFormat.Json;
        }
        else
        {
            return WebContentFormat.Default;
        }
    }
}

O tipo deve substituir o GetMessageFormatForContentType(String) método. O método deve avaliar o contentType argumento e retornar um dos seguintes valores: Json, Xml, Raw, ou Default. Retornando Default adia para os mapeamentos padrão do codificador de mensagens da Web. No código de exemplo anterior, o tipo de conteúdo é mapeado text/javascript para JSON e todos os outros mapeamentos permanecem inalterados.

Para usar a JsonContentTypeMapper classe, use o seguinte em seu 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>

Para verificar o requisito para usar o JsonContentTypeMapper, remova o atributo contentTypeMapper do arquivo de configuração acima. A página do cliente não é carregada ao tentar usar text/javascript para enviar conteúdo JSON.

Para configurar, compilar e executar o exemplo

  1. Certifique-se de ter executado o procedimento de instalação única para os exemplos do Windows Communication Foundation.

  2. Crie a solução WebContentTypeMapperSample.sln conforme descrito em Criando os exemplos do Windows Communication Foundation.

  3. Navegue até http://localhost/ServiceModelSamples/JCTMClientPage.htm (não abra JCTMClientPage.htm no navegador a partir do diretório do projeto).