問題
WebApi
、 HttpClient
、 SqlCommand
、 SqlDataReader
、 NpgsqlCommand
、またはカスタムインストゥルメンテーションの非同期トランザクションは表示されません。 この問題は通常、.NET フレームワーク 4.0 以前でNew Relic の .NET エージェントを使用して作成され、その後 .NET フレームワーク 4.5 以降に移行されたアプリで発生します。
解決
アプリのアップグレードパイプラインの設定
以下を使用している場合は、特定のappSetting
またはsystem.web
設定が必要です。
- WebApi1またはWebApi2
HttpClient
、SqlCommand
、SqlDataReader
、またはNpgsqlCommand
- 非同期関連のカスタムトランザクションまたはカスタムインストルメンテーション
- New Relic .NET エージェントのバージョン 5.11.53.0 以上
- アプリのターゲットとなる.NET Framework 4.5以上
これらの条件に当てはまる場合は、.NET 4.5で導入されたアップグレードされたリクエスト処理パイプラインをアプリケーションで使用する必要があります。
アップグレードされたパイプラインを使用するには、 web.config
に次のいずれかの設定が含まれていることを確認してください。どちらの設定も表示されない場合は、いずれかを追加します。
おすすめです。新しいパイプラインとの互換性の確認
オプション:実行時に非同期コードの追加チェックを行うよう、.NETフレームワークに指示することができます。これらのチェックは、レガシー ASP パイプラインによって隠されている可能性のある非同期コードの一般的な問題を検出します。
問題なくパスした場合は、アプリが新しいパイプラインを正しく処理していると確信できます。詳しくは、 Microsoftの設定ドキュメント をご覧ください。
追加のチェックを適用するには、次をweb.config
に追加します:
<configuration> <appSettings> <add key="aspnet:AllowAsyncDuringSyncStages" value="false" /> </appSettings><configuration>
原因
レガシーの統合パイプラインが存在する場合、非同期インスツルメンテーションが無効になります。.NET 4.5以前では、統合されたパイプラインがデッドロックを引き起こす可能性がありました。この.NET Frameworkのバグの詳細については、以下を参照してください。