問題
非同期トランザクション WebApi、HttpClient、SqlCommand、SqlDataReader、NpgsqlCommand、またはカスタムインスツルメンテーションの場合は表示されません。この問題は、 New Relic の .NET エージェント で .NET Framework 4.0 以前の環境で作成されたアプリを、.NET Framework 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のバグの詳細については、以下を参照してください。