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
Certifique-se de ter executado o procedimento de instalação única para os exemplos do Windows Communication Foundation.
Crie a solução WebContentTypeMapperSample.sln conforme descrito em Criando os exemplos do Windows Communication Foundation.
Navegue até
http://localhost/ServiceModelSamples/JCTMClientPage.htm
(não abra JCTMClientPage.htm no navegador a partir do diretório do projeto).