超过 1,000 次成功调用后,获得 "An existing connection was forcibly closed"

After over 1,000 successful calls, getting "An existing connection was forcibly closed"

我正在对客户端和服务器代码进行一些负载测试。随着它的进行,前 1,000 个调用就可以了。但是(在某些 运行 上),我开始收到以下异常:

System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.  
---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host..  
---> System.Net.Sockets.SocketException (10054): An existing connection was forcibly closed by the remote host.

一些搜索表明,一个常见的解决方案是添加以下代码:

System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

但这似乎是 none 调用工作时的修复。在我的情况下,在开始出现上述异常之前,我可以获得 1,000 多个成功调用。

我问的真正目的是,在这种情况开始发生后,我遇到了很多类似的失败。

我想知道发生这种情况后我的 HttpClient 是否处于故障状态?如果是,我该如何解决? (我的 HttpClient 是静态的,如果失败,那么我所有的调用都会失败。)

注意:我的代码 运行 作为 NuGet 需要 运行 在 .Net Framework 4.7 和 .Net Core 3.1 中。

这不应该与您的代码有关,那是主机拒绝连接,它可能因为您发送的请求太多而关闭,或者更可能是它限制了您的速率。

我认为这个问题是由于 WSO2 API 管理器限制了连接数。我们更改了 WSO2 服务器上的一些设置,这个问题就消失了。 (我不知道 WSO2 管理员所做的更改。)