.NET Core HttpClient请求异常思考

开发
考虑在Windows和Linux系统分别测试验证,最终确认是否是HttpClient底层在两者系统上机制的有些不同,导致存在的bug呢?

[[403899]]

本文转载自微信公众号「JeffckyShare」,作者Jeffcky 。转载本文请联系JeffckyShare公众号。

下面我们结合如下两个异常信息进行大致排查分析,到底什么时候会抛出这两个异常信息呢?

异常信息分析

上述异常说到底还是连接问题导致,但是连接超时有很多种情况,比如客户端主动关闭连接,又比如服务端对请求应答超时等等,这里给出仅我个人理解的常见情况,大家可以作为基本参考

大前提:根据项目实际情况,分析实际业务对应场景,主要考虑以下最后两个因素

一是,适当观察下数据量大小,万一偶尔出现数据量达到M级别呢,当然既然考虑HTTP,这种情况可以基本忽略

二是,HTTP是否还能承载对应业务,排除性能瓶颈

三是,评估考虑是否增加自身平台请求超时时间设置?同时也清楚自身平台是否存在请求非常频繁?以及也一定要了解对接方是否存在处理请求非常耗时?

首先,若以上两者都不是,可以从网络原因开始分析,比如防火墙设置(根据操作系统不同而采取对应方案)、DNS解析设置(有参数可配置刷新DNS解析)、IP设置、代理设置(有参数可配置忽略代理)等等

其次,保证启用客户端持久化连接以及增加连接数限制

  1. //增加保活机制,表明连接为长连接 
  2. client.DefaultRequestHeaders.Connection.Add("keep-alive"); 
  3.  
  4. //启用保活机制(保持活动超时设置为 2 小时,并将保持活动间隔设置为 1 秒。) 
  5. ServicePointManager.SetTcpKeepAlive(true, 7200000, 1000); 
  6.  
  7.  //默认连接数限制为2,增加连接数限制 
  8. ServicePointManager.DefaultConnectionLimit = 512; 

然后,依然不能解决问题,尝试使用Socket通信连接

  1. var client = new HttpClient(new SocketsHttpHandler() 
  2.     //考虑忽略使用代理 
  3.     UseProxy = false
  4.     //考虑增加连接数配置 
  5.     MaxConnectionsPerServer = 100, 
  6.     //考虑忽略重定向响应 
  7.     AllowAutoRedirect = false
  8.     //考虑忽略SSL证书验证 
  9.     SslOptions = new SslClientAuthenticationOptions() 
  10.     { 
  11.         RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true 
  12.     }, 
  13.     //考虑数据压缩设置 
  14.     AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip, 
  15.   }) 
  16.   { 
  17.       BaseAddress = new Uri(""), 
  18.       Timeout = TimeSpan.FromSeconds(30), 
  19.   }; 

最后,还不能解决问题,若是Windows通过WireShark抓包分析,若是Linux使用tcpdump抓包,结合WireShark分析

如果其他干扰因素都已经基本排除,同时通过WireShark抓包一切正常,是不是没辙了

自信一点,适当怀疑一下HttpClient本身可能就存在这样的问题呢?

 

考虑在Windows和Linux系统分别测试验证,最终确认是否是HttpClient底层在两者系统上机制的有些不同,导致存在的bug呢?

 

责任编辑:武晓燕 来源: JeffckyShare
相关推荐

2021-06-05 23:41:47

NET异常 HttpClient

2021-12-02 07:25:58

ASP.NET CorAjax请求

2021-05-11 15:50:28

ASP.NET单元测试

2013-08-22 17:10:09

.Net异常处理

2024-09-24 17:34:05

2024-08-29 09:11:38

GolangEOF连接池

2024-05-13 09:32:06

拦截器HTTP中间件

2012-11-08 11:19:38

2016-12-06 10:23:24

.NETCore首例Office

2024-11-12 07:28:39

2019-08-07 14:25:21

.NET.NET Core 3编程语言

2018-08-20 08:03:46

跨平台 Web操作系统

2021-12-05 18:22:20

.NETLS Cipher套件

2024-06-11 09:00:00

异步编程代码

2024-09-09 07:37:51

AspJWT权限

2024-09-30 09:48:41

RabbitMQ消息中间件

2024-06-27 10:48:48

2009-09-07 09:15:36

.NET VS Jav

2009-07-29 09:53:24

ASP.NET异常管理

2024-04-15 16:11:33

C#HTTP请求.NET
点赞
收藏

51CTO技术栈公众号