如何解决.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 举报,一经查实,本站将立刻删除。