Compartilhar via


Exemplo de WebContentTypeMapper

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

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 de estilo push), o desenvolvedor de serviços 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 do serviço deve fornecer um tipo que deriva de WebContentTypeMapper para manipular corretamente o tipo de conteúdo fornecido, conforme mostrado no código de 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 precisa substituir o método GetMessageFormatForContentType(String). O método deve avaliar o contentType argumento e retornar um dos seguintes valores: Json, , Xml, Rawou Default. Retornar Default transfere para a Web padrão os mapeamentos do codificador de mensagens. No código de exemplo anterior, o text/javascript tipo de conteúdo é mapeado 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 de uso do JsonContentTypeMapper, remova o atributo contentTypeMapper do arquivo de configuração acima. A página do cliente falha ao carregar ao tentar usar text/javascript para enviar conteúdo JSON.

Para configurar, compilar e executar o exemplo

  1. Verifique se você executou o Procedimento de instalação avulsa dos exemplos do Windows Communication Foundation.

  2. Compile a solução WebContentTypeMapperSample.sln conforme descrito em Building the Windows Communication Foundation Samples.

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