我们有几个 .NET Core 3.0 Web 应用程序(英国南部)连接到在 Amazon Windows Server 2016 数据中心(EC2 实例)上运行的 MS SQL 2016 数据库。我们通过安装在 SQL Server 上的 Azure 中继/混合连接进行连接。
它已经运行了一年多,没有任何错误,但最近我们开始收到以下错误,大约每 30 个连接中有 1 个错误:
处理请求时发生未处理的异常。Win32Exception:现有连接被远程主机强行关闭。位置不明
SqlException:与服务器成功建立连接,但在登录前握手期间发生错误。(提供者:TCP 提供者,错误:0 - 现有连接被远程主机强行关闭。)
如果你再试一次,它通常会起作用。
在阅读了很多关于此的帖子后,我使用EnableRetryOnFailure()将瞬态错误处理添加到代码/弹性中到数据库连接。
我还尝试将Trusted_Connection=False添加到连接字符串中。
在此之后,您可能会看到连接重试多次,直到它工作,有时需要 20 秒或更长时间。尽管如此,可能有 100 个连接中的 1 个最终会因相同的错误而失败。
我们还查看了 TLS_DHE 错误https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/apps-forcibly-closed-tls-connection-errors但服务器上未安装 TLS_DHE 密码一点也不。
Windows 服务器上的事件日志或发生错误时的数据库日志中没有任何内容。
基础架构的最新变化:Panda 防病毒软件,将 Web 应用程序移至不同的 Azure 区域。
这几天我一直在阅读这方面的帖子,大部分都是很老的,而且略有不同。我正在寻找任何想法来尝试查明错误。谢谢。
编辑:我在 Microsoft/ServiceBus/Client 中发现了一些事件日志
HybridConnectionManager 跟踪:Microsoft.Azure.Relay.RelayException:无法从传输连接读取数据:现有连接被远程主机强行关闭。---> System.Net.WebSockets.WebSocketException:发生内部 WebSocket 错误。有关更多详细信息,请参阅 innerException(如果存在)。---> System.IO.IOException: Unable to read data from the transport connection: 一个现有的连接被远程主机强行关闭。---> System.Net.Sockets.SocketException:现有连接被远程主机在 System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult) 在 System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult) 处强行关闭--- 内部异常堆栈跟踪结束 ---