我们有一个针对.NET 4.5.1的应用程序,并且保持不变。
但是,当我们从4.5.1 - > 4.7.1升级服务器上的.NET框架时,我们几小时后开始体验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
池中的连接现在可能比以前更长时间保持活动作为此行为更改的副作用或预期功能,因此使用“死但重试连接”堵塞连接池,而之前它们会死亡?
它有点投机;但可能会引导你走上正确的道路。