Problema
Com o agente .NET habilitado para um aplicativo Windows Communication Foundation (WCF), o cabeçalho de resposta Content-Type
é alterado inesperadamente para application/xml
.
Solução
Basic solutions | Comments |
---|---|
Desabilite o recurso de Rastreamento Multiaplicativo (CAT). | Leia sobre como alterar a configuração do CAT. Se precisar que o CAT permaneça habilitado, consulte as outras soluções. |
Use o recurso distributed tracing (DT) em vez de CAT. | Leia sobre como habilitar a configuração DT. DT é uma forma nova e aprimorada de realizar rastreamento e possui recurso aprimorado, comparado ao CAT, na interface New Relic. A DT não requer modificações nos cabeçalhos de resposta e não será afetada pela alteração dos cabeçalhos de resposta. |
Adicione o cabeçalho | Esta solução requer que você modifique o código do seu aplicativo. |
Causa
O recurso Multiaplicativo Tracing (CAT) está habilitado por padrão no agente .NET. CAT funciona adicionando cabeçalhos às mensagens de solicitação e às mensagens de resposta.
Isto é o que acontece no agente:
- A implementação do método de serviço WCF é executada.
- O agente tentará adicionar cabeçalhos CAT à resposta do WCF adicionando uma instância
HttpResponseMessageProperty
, com os cabeçalhos CAT, aOperationContext.Current.OutgoingMessageProperties
. - O
DispatchMessageFormatter
personalizado é executado e cria uma nova mensagem onde o cabeçalhoContent-Type
esperado é adicionado diretamente à nova mensagem. - A implementação do WCF da Microsoft tentará mesclar as propriedades da mensagem definidas na mensagem de resposta com as propriedades da mensagem definidas em
OperationContext
. Consulte esta referência da Microsoft em ImmutableDispatchRuntime.cs para obter mais detalhes. - O
HttpResponseMessageProperty
não suporta mesclagem, portanto, o valor definido emOperationContext
é usado em vez do valor definido na mensagem. - Como resultado, o cabeçalho
Content-Type
que foi originalmente adicionado à mensagem formatada é descartado e o cabeçalhoContent-Type
padrão é usado.
Como o agente deve oferecer suporte a várias associações WCF, ele precisa adicionar nossos cabeçalhos CAT ao OperationContext
.