• /
  • ログイン

エージェントがWCFアプリ(.NET)のContent-Typeヘッダーを変更します

コンテンツ / APMエージェント / .NETエージェント / トラブルシューティング

問題

.NETエージェントがWindows Communication Foundation(WCF)アプリケーションに対して有効になっている場合、応答ヘッダーContent-Typeが予期せずapplication/xmlに変更されます。

解決策

基本的な解決策

コメント

クロスアプリケーショントレーシング(CAT)機能を無効にします。

CAT設定を変更する方法についてお読みください。

CATを有効のままにする必要がある場合は、他のソリューションを参照してください。

CATの代わりにディストリビューティッド(分散)トレーシング機能を使用します。

DT設定を有効にする方法についてお読みください。

DTはトレースを実行するための新しく改善された方法であり、CATと比較してNew Relic UIの機能が強化されています。

DTは応答ヘッダーを変更する必要がなく、応答ヘッダーを変更しても影響を受けません。

メッセージとOperationContextの両方に目的のContent-Typeヘッダーを追加します。

このソリューションでは、アプリケーションコードを変更する必要があります。

原因

クロスアプリケーショントレーシング(CAT)機能は、.NETエージェントでデフォルトで有効になっています。CATは、リクエストメッセージと応答メッセージの両方にヘッダーを追加することによって機能します。

これは、エージェントで発生する内容です。

  1. WCFサービスメソッドの実装が実行されます。
  2. このエージェントは、CATヘッダーを含む HttpResponseMessageProperty インスタンスを OperationContext.Current.OutgoingMessageProperties に追加することにより、WCF応答にCATヘッダーを追加しようとします。
  3. カスタム DispatchMessageFormatter が実行され、新しいメッセージが作成されます。ここで、予期される Content-Type ヘッダーが新しいメッセージに直接追加されます。
  4. MicrosoftのWCF実装は、応答メッセージで定義されたメッセージプロパティを OperationContext で定義されたメッセージプロパティとマージしようとします。詳細については、ImmutableDispatchRuntime.cs に関するこのMicrosoftリファレンスを参照してください。
  5. HttpResponseMessagePropertyはマージをサポートしていないため、メッセージで定義されている値の代わりに、OperationContextで定義されている値が使用されます。
  6. その結果、フォーマットされたメッセージに最初に追加されたContent-Type ヘッダーは破棄され、デフォルトのContent-Typeヘッダーが使用されます。

エージェントは複数のWCFバインディングをサポートする必要があるため、CATヘッダーをOperationContextに追加する必要があります。

その他のヘルプ

さらに支援が必要な場合は、これらのサポートと学習リソースを確認してください:

問題を作成するこのページを編集する
Copyright © 2020 New Relic Inc.