.NET Core HttpClient请求异常思考

发表于:2021-6-10 09:24

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Jeffcky    来源:JeffckyShare

  下面我们结合如下两个异常信息进行大致排查分析,到底什么时候会抛出这两个异常信息呢?
  异常信息分析
  上述异常说到底还是连接问题导致,但是连接超时有很多种情况,比如客户端主动关闭连接,又比如服务端对请求应答超时等等,这里给出仅我个人理解的常见情况,大家可以作为基本参考。
  大前提:根据项目实际情况,分析实际业务对应场景,主要考虑以下最后两个因素。
  一是,适当观察下数据量大小,万一偶尔出现数据量达到M级别呢,当然既然考虑HTTP,这种情况可以基本忽略。
  二是,HTTP是否还能承载对应业务,排除性能瓶颈。
  三是,评估考虑是否增加自身平台请求超时时间设置?同时也清楚自身平台是否存在请求非常频繁?以及也一定要了解对接方是否存在处理请求非常耗时?
  首先,若以上两者都不是,可以从网络原因开始分析,比如防火墙设置(根据操作系统不同而采取对应方案)、DNS解析设置(有参数可配置刷新DNS解析)、IP设置、代理设置(有参数可配置忽略代理)等等。
  其次,保证启用客户端持久化连接以及增加连接数限制。
  //增加保活机制,表明连接为长连接 
  client.DefaultRequestHeaders.Connection.Add("keep-alive"); 
   
  //启用保活机制(保持活动超时设置为 2 小时,并将保持活动间隔设置为 1 秒。) 
  ServicePointManager.SetTcpKeepAlive(true, 7200000, 1000); 
   
   //默认连接数限制为2,增加连接数限制 
  ServicePointManager.DefaultConnectionLimit = 512; 
  然后,依然不能解决问题,尝试使用Socket通信连接。
  var client = new HttpClient(new SocketsHttpHandler() 
  { 
      //考虑忽略使用代理 
      UseProxy = false, 
      //考虑增加连接数配置 
      MaxConnectionsPerServer = 100, 
      //考虑忽略重定向响应 
      AllowAutoRedirect = false, 
      //考虑忽略SSL证书验证 
      SslOptions = new SslClientAuthenticationOptions() 
      { 
          RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true 
      }, 
      //考虑数据压缩设置 
      AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip, 
    }) 
    { 
        BaseAddress = new Uri(""), 
        Timeout = TimeSpan.FromSeconds(30), 
    }; 
  最后,还不能解决问题,若是Windows通过WireShark抓包分析,若是Linux使用tcpdump抓包,结合WireShark分析。
  如果其他干扰因素都已经基本排除,同时通过WireShark抓包一切正常,是不是没辙了。
  自信一点,适当怀疑一下HttpClient本身可能就存在这样的问题呢?
  考虑在Windows和Linux系统分别测试验证,最终确认是否是HttpClient底层在两者系统上机制的有些不同,导致存在的bug呢?

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号