問題
.NETエージェントがWindows Communication Foundation(WCF)アプリケーションに対して有効になっている場合、応答ヘッダーContent-Type
が予期せずapplication/xml
に変更されます。
解決
Basic solutions | Comments |
---|---|
クロスアプリケーショントレーシング(CAT)機能を無効にします。 | CAT設定を変更する方法についてお読みください。 CATを有効のままにする必要がある場合は、他のソリューションを参照してください。 |
CATの代わりにディストリビューティッド(分散)トレーシング機能を使用します。 | DT設定を有効にする方法についてお読みください。 DTはトレースを実行するための新しく改善された方法であり、CATと比較してNew Relic UIの機能が強化されています。 DTは応答ヘッダーを変更する必要がなく、応答ヘッダーを変更しても影響を受けません。 |
メッセージと | このソリューションでは、アプリケーションコードを変更する必要があります。 |
原因
クロスアプリケーショントレーシング(CAT)機能は、.NETエージェントでデフォルトで有効になっています。CATは、リクエストメッセージと応答メッセージの両方にヘッダーを追加することによって機能します。
これは、エージェントで発生する内容です。
- WCFサービスメソッドの実装が実行されます。
- エージェントは、CATヘッダーを使用して
HttpResponseMessageProperty
インスタンスをOperationContext.Current.OutgoingMessageProperties
に追加することで、WCF応答にCATヘッダーを追加しようとします。 - カスタム
DispatchMessageFormatter
が実行され、新しいメッセージが作成されます。ここで、予期されるContent-Type
ヘッダーが新しいメッセージに直接追加されます。 - MicrosoftのWCF実装は、応答メッセージで定義されたメッセージプロパティを
OperationContext
で定義されたメッセージプロパティとマージしようとします。詳細については、ImmutableDispatchRuntime.cs に関するこのMicrosoftリファレンスを参照してください。 HttpResponseMessageProperty
はマージをサポートしていないため、メッセージで定義されている値の代わりに、OperationContext
で定義されている値が使用されます。- その結果、フォーマットされたメッセージに最初に追加された
Content-Type
ヘッダーは破棄され、デフォルトのContent-Type
ヘッダーが使用されます。
エージェントは複数のWCFバインディングをサポートする必要があるため、CATヘッダーをOperationContext
に追加する必要があります。