.NET 4.5.1をターゲットとするアプリがあり、これは変更されていません。
ただし、サーバーの.NETフレームワークを4.5.1-> 4.7.1からアップグレードすると、数時間後にSQLタイムアウトが発生し始めました(アプリターゲットは4.5.1のままでした)。
"Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached."
同じ処理を行った他のサーバーでも問題が発生したため、.NETに重大な変更を加えたところ、次の記事が見つかりました: https://blogs.msdn.Microsoft.com/dataaccesstechnologies/2016/05/ 07/connection-timeout-issue-with-net-framework-4-6-1-transparentnetworkipresolution /
その記事は別の例外タイプを引用していますが、多少関連があるかもしれません。しかし、DNSルックアップに500ミリ秒以上かかった場合、私は驚かれることでしょう。また、この接続文字列構成の多くのケースが報告され、使用されることを期待しています。
私たちのアプリはトラフィックが多いですが、.NETフレームワークを更新するまでこれが何年も問題にならなかったので、接続がリークされていないと確信しています。
この修正を適用してみます(結果が表示されるまで24時間以上待ちます)が、他に見逃していたことはありますか?これが解決策であるとは確信していません。
編集:.NETを4.5.1にロールバックしてすべてのサーバーを再起動した後でも、まだ問題が発生しています。コードベースでは他に何も変更されていませんが、「SchUseStrongCrypto」を有効にするレジストリの変更はまだロールバックしていません。それが原因である可能性がある場合は、
私はこれを経験していませんが、リンク https://docs.Microsoft.com/en-us/dotnet/framework/migration-guide/runtime/4.0-4.7.1 は、 SQL接続プール。壊れた接続をはるかに長く再試行します。このリンクは、新しい動作をバイパスするための設定も提供します。
ConnectRetryCount = 0
この動作の副作用または意図された機能が変更されたため、プール内の接続が以前よりも長く存続し、接続が「デッドだが再試行中の接続」で詰まっている可能性はありますか?
その少し投機的です。しかし、正しい道にあなたを導くかもしれません。