Problème
Avec l'agent .NET activé pour une application Windows Communication Foundation (WCF), l'en-tête de réponse Content-Type
est modifié de manière inattendue en application/xml
.
Solution
Basic solutions | Comments |
---|---|
Désactivez la fonctionnalité de traçage inter-applications (CAT). | Découvrez comment modifier la configuration CAT. Si vous souhaitez que CAT reste activé, consultez les autres solutions. |
Utilisez la fonctionnalité de traçage distribué (DT) au lieu de CAT. | Découvrez comment activer la configuration DT. DT est une nouvelle méthode améliorée pour réaliser le traçage et dispose de fonctionnalités améliorées, par rapport à CAT, dans l'UI de New Relic. DT ne nécessite pas de modifications des en-têtes de réponse et ne sera pas affecté par la modification des en-têtes de réponse. |
Ajoutez l'en-tête | Cette solution nécessite de modifier le code de votre application. |
Cause
La fonctionnalité de traçage inter-applications (CAT) est activée par défaut dans l'agent .NET. CAT fonctionne en ajoutant des en-têtes aux messages de demande et aux messages de réponse.
Voici ce qui se passe dans l'agent :
- L'implémentation de la méthode de service WCF s'exécute.
- L'agent tentera d'ajouter des en-têtes CAT à la réponse WCF en ajoutant une instance
HttpResponseMessageProperty
, avec les en-têtes CAT, àOperationContext.Current.OutgoingMessageProperties
. - Le
DispatchMessageFormatter
personnalisé s'exécute et crée un nouveau message dans lequel l'en-têteContent-Type
attendu est ajouté directement au nouveau message. - L'implémentation WCF de Microsoft tentera de fusionner les propriétés de message définies dans le message de réponse avec les propriétés de message définies dans
OperationContext
. Consultez cette référence Microsoft sur ImmutableDispatchRuntime.cs pour plus de détails. - Le
HttpResponseMessageProperty
ne prend pas en charge la fusion, donc la valeur définie dans leOperationContext
est utilisée à la place de la valeur définie dans le message. - Par conséquent, l’en-tête
Content-Type
initialement ajouté au message formaté est supprimé et l’en-têteContent-Type
par défaut est utilisé.
Étant donné que l'agent doit prendre en charge plusieurs liaisons WCF, il doit ajouter nos en-têtes CAT au OperationContext
.