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
DispatchMessageFormatterpersonnalisé s'exécute et crée un nouveau message dans lequel l'en-têteContent-Typeattendu 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
HttpResponseMessagePropertyne prend pas en charge la fusion, donc la valeur définie dans leOperationContextest utilisée à la place de la valeur définie dans le message. - Par conséquent, l’en-tête
Content-Typeinitialement ajouté au message formaté est supprimé et l’en-têteContent-Typepar 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.