.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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...