.NETCoreHttpClient请求异常思考

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

10年积累的成都网站设计、网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先建设网站后付款的网站建设流程,更有静安免费网站建设让你可以放心的选择与我们合作。

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

异常信息分析

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

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

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

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

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

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

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

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

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

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

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

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

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

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

网页题目:.NETCoreHttpClient请求异常思考
文章链接:http://www.shufengxianlan.com/qtweb/news2/158352.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联