.NET 5 以后的 HttpClient 超时问题

这篇具有很好参考价值的文章主要介绍了.NET 5 以后的 HttpClient 超时问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

起因是朋友在使用深信服的 Easy Connect 连接到内网之后,使用 HttpClient 访问对应内网的 API 站点均返回 System.Net.Sockets.SocketException (10060) 异常。但使用其他语言的原生 HTTP 库,比如 Golang / Python / Java 都可以正常访问,因此怀疑是 HttpClient 的问题。

原因

经过搜索得知,这是存在于 .NET 5 及其以上版本的问题,在 .NET 3.1 是不存在这种情况的。底层原因是从 .NET 5 开始,HttpClient 的底层实现使用的是双栈套接字(Dual-Stack Sockets),在某些情况下,你的网卡获得了 IPv6 地址,但是 VPN 处于某种原因不能正确地处理 IPv6 请求时就会导致上述情况的发生。在 PR #55012 中,说明了这种情况:

Introduces an AppContext switch System.Net.DisableIPv6 and environment variable DOTNET_SYSTEM_NET_DISABLEIPV6 to emulate the lack of OS-level IPv6 support. This is useful to workaround dual-stack socket issues when the OS reports support of IPv6, but some other underlying infrastructure element (typically VPN) doesn't function well with IPv6 request.

For consistency, this switch also impacts NameResolution and Ping, not only Sockets.

解决

根据 PR 提到的信息,我们只需要在程序启动的时候使用以下代码禁用 IPv6 栈即可解决。

AppContext.SetSwitch("System.Net.DisableIPv6",true);

相关 Issue / PR:文章来源地址https://www.toymoban.com/news/detail-480384.html

  • https://github.com/dotnet/runtime/issues/47267
  • https://github.com/dotnet/runtime/issues/52287
  • https://github.com/dotnet/runtime/issues/44686
  • https://github.com/dotnet/runtime/commit/067aa165d97372f3e281786801d014fccea8b12c

到了这里,关于.NET 5 以后的 HttpClient 超时问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java.net.URL超时时间默认无限制问题

    Java中可以通过URLConnection类或者HttpURLConnection类来开发网络应用,它们内部又是通过java.net.URL类来实现的。可以通过URLConnection.setConnectTimeout()方法和URLConnection.setReadTimeout()方法来设置URLConnection连接和读取的超时时间。   其中setConnectTimeout()设置连接超时时间,单位毫秒 setRead

    2024年02月13日
    浏览(37)
  • 不定期更新:我对 ChatGPT 进行多方位了解后的报告,超级全面,建议想了解的朋友看看

    优质介绍视频: GPT4+前端【AI编程新纪元】 【渐构】万字科普GPT4为何会颠覆现有工作流;为何你要关注微软Copilot、文心一言等大模型 此文章不定期更新(一周应该会更新一次) 最近一次更新:2023.5.17 23:00 (主要更新了新闻部分,本周 openai 向 plus 用户开放插件及 Browsing 模

    2024年02月01日
    浏览(61)
  • .NET Core HttpClient请求异常分析

    推送逻辑是在类库中使用HttpClient,所以没有使用HttpClientFactory,因此定义静态变量来使用HttpClient,而非每一个请求就实例化一个HttpClient, 接下来我们来详细分析项目示例代码并对其进行改进 若对接方仅使用HTTPS协议,无需验证证书,最好是忽略证书验证,否则有可能会引起

    2024年02月03日
    浏览(47)
  • 在.NET Core使用 HttpClient 的正确方式

    前言 HttpClient 是 .NET Framework、.NET Core 或 .NET 5以上版本中的一个类,用于向 Web API 发送 HTTP 请求并接收响应。它提供了一些简单易用的方法,如 GET、POST、PUT 和 DELETE,可以很容易地构造和发送 HTTP 请求,并处理响应数据。它是我们比较常用的官方HTTP请求组件,那么你们都正确

    2023年04月12日
    浏览(33)
  • Winform中使用HttpClient(设置最大超时响应时间)调用接口并做业务处理时界面卡住,使用async Task await异步任务编程优化

    Winform中怎样使用HttpClient调用http的get和post接口并将接口返回json数据解析为实体类: Winform中怎样使用HttpClient调用http的get和post接口并将接口返回json数据解析为实体类_winform请求http接口_霸道流氓气质的博客-CSDN博客 参考前面使用HttpClient调用http的get和post接口的小示例, 需要定

    2024年02月02日
    浏览(55)
  • .NET7使用HttpClient实现查询天气预报接口

    朋友做网站需要根据城市展示天气预报,找了一圈没有找到靠谱的接口,今天在中央气象台的官网查询某个城市找到了接口,先用postman试了一下居然可以使用,可以查询某个城市7天的天气预报等信息。但是查询编码是气象台自己的编码,在网上搜索了一下居然有这个编码。

    2023年04月14日
    浏览(50)
  • 【微软技术栈】C#.NET 使用 HttpClient 类发出 HTTP 请求

    创建 HttpClient 发出 HTTP 请求 处理 HTTP 响应 HTTP 错误处理 HTTP 代理 本文介绍如何使用  HttpClient  类发出 HTTP 请求和处理响应。  重要 所有示例 HTTP 请求都以下面 URL 之一为目标: https://jsonplaceholder.typicode.com:用于测试和原型设计的免费虚设 API。 https://www.example.com:此域用于

    2024年02月04日
    浏览(37)
  • .net6中, 用数据属性事件触发 用httpclient向服务器提交Mes工单

    MES开发中, 客户往往会要求 工单开始时记录工艺数据, 工单结束时将这些工艺数据回传到更上一级的WES系统中. 因为MES系统和PLC 是多线程读取, 所以加锁, 事件触发是常用手段.

    2024年02月10日
    浏览(46)
  • 请设置注册表项HKLMSoftwareMicrosoft.NETFrameworkInstallRoot,指向.NET Framework安装位置(写给我自己备份的免得以后找不到)

    今天上午遇到这个问题, 百度了很多文章, 都一一试了, 还是不行, 除了手工修改注册表外,甚至把.netframework全删了再重启安装一次,还是不行,最后找到一个文章提供解决方法,原来是要在注册表改2个地方, 但前面看的文章都只说了一处,怪不得一直不行,现在写出来方案: 环境wi

    2024年02月05日
    浏览(106)
  • 如何在 ASP.NET Core 配置请求超时中间件

    本文参考官方文档,使用Asp.net core 8.0 的最小API 模板项目,配置超时中间件。 超时中间件可用于所有类型的ASP.NET Core应用:最小 API、带控制器的 Web API、MVC 和 Razor Pages。请求超时的属性位于命名空间 Microsoft.AspNetCore.Http.Timeouts 中。 需要注意的是,当应用在调试模式下运行时

    2024年01月20日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包