.NET HttpClient和DNS轮询速度慢的请求连接意外关闭

问题描述

我们正在使用.NET 4.8 HttpClient通过HTTPS从系统A向系统B发送许多小的JSON休息请求。 我们使用HttpClient的单例实例,并通过以下方式设置实例:

ServicePointManager.UseNagleAlgorithm = false;
ServicePointManager.DefaultConnectionLimit = 50;
ServicePointManager.Expect100Continue = false;
//ServicePointManager.MaxServicePointIdleTime = 5000; 
//ServicePointManager.EnableDnsRoundRobin = true;
//ServicePointManager.DnsRefreshTimeout = 1000 * 60;

请注意,我们也尝试了注释设置,但运气不好(其中最后两个实际上使情况变得更糟)

系统A正在发送请求,并且由Azure负载均衡器后面的多台计算机组成。 系统B正在接收请求并使用DNS轮询

我们遇到的行为与此处描述的行为类似:System.Net.HttpClient - Unexplained timeout when calling GetAsync

有些呼叫会花费很长时间,而其中的一些会在大约10秒钟后失败,并显示以下错误消息:

基础连接已关闭:连接意外关闭。

在另一端禁用​​DNS轮询,问题消失了。重新启用DNS轮询后,问题就会再次出现。

有人遇到过与DNS循环和HttpClient相关的类似问题吗?您对如何解决此问题有任何建议吗? (我们正在考虑启用跟踪,但是这很棘手,因为它是一个有大量流量通过的生产环境。)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)