写点什么

修复.NET 的 HttpClient

  • 2018-03-04
  • 本文字数:1081 字

    阅读完需:约 4 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

早在 2016 年我们就报道过 ,.NET 的HttpClient 存在一些问题。随着.NET Core 2.1 中HttpClientFactory 的引入,其中部分问题已经得到缓解。

HttpClient 的根本问题是,每次调用资源好像都应该在使用后立即释放。在现实中,那意味着每个目标服务器都要创建一次,然后在应用程序运行期间一直保留。除非是,比如说,需要清理 DNS 缓存。

新增的 HttpClientFactory 让用户可以在应用程序启动时预先配置 HttpClient。每项配置都有名称,让使用正确的配置请求 HttpClient 变得简单。为了防止用户不需要自定义配置,它也提供了未命名配置。

考虑到字符串容易出错,HttpClient 的配置可以指定为特定的类型。例如,用户可以创建 GitHubService 类配置。然后,DI 框架会确保为使用那个配置而非默认配置的 HttpClient 提供 GitHubService 实例。

这个管理 HttpClient 的新框架不会改变基本的使用规则:销毁 HttpClient 仍然是危险的。对于 DNS 缓存问题,Karel Zikmund 写到:

我们正在积极地讨论设计,以期直接在 ManagedHandler 中解决 DNS 变化问题。目前,我们正在考虑两个选项:要么支持 DNS TTL(#24257 ),要么是类似 ConnectionLeaseTimeout 这样的 API(#26331 )。我们会结合 2.1 中的 HttpClientFactory 确保 DNS 变化的情况得到解决。

消息处理程序和自动重试

HttpClient 有一个鲜为人知的特性是能够添加消息处理程序。开箱即用,HttpClientHandler 控制着诸如是否允许自动重定向(Cookie 容器会用到)、预认证如何发挥作用这样的特性。

通过实现 DelegatingHandler 的子类可以进一步扩展。在 Channel 9 的一个示例中,Daniel Roth 展示了如何创建一个简单的重试处理程序。

HttpClientFactory 完善了这个特性,它允许开发人员将 HttpClientHandler 作为 HttpClient 配置的一部分。这是有意为 DI 提供便利。

SocketHttpHandler

HttpClientHandler 子系统不只是为了改变行为,它还可以完全改变 HttpClient 与网络通信的方式。微软正在通过引入 SocketHttpHandler 对此加以利用。这是一个“全新的托管 HttpClientHandler”,可以消除对“libcurl (对于 Linux)和 WinHTTP(对于 Windows)的平台依赖”。公告继续写到:

对于预览版 1,用户可以通过下面两种方式中的一种使用 SocketHTTPHandler:

环境变量:COMPlus_UseManagedHttpClientHandler=true
AppContext:System.Net.Http.UseManagedHttpClientHandler=true

用户也可以开启 ASP.NET 的套接字模式。随着当前原生实现的引入,这最终可能会成为默认设置。

查看英文原文 Fixing .NET’s HttpClient

2018-03-04 18:002767
用户头像

发布了 1008 篇内容, 共 444.4 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

“以光惠算”走进校园,湖北大学用F5G-A全光网赋能智慧校园

Alter

SIGGRAPH 2025 | 快手可灵团队提出3D感知的电影级文本到视频生成框架CineMaster

快手技术

#大模型

离线声音合成应用 RWKV Talk:多语言、多音色、支持声音克隆;马斯克:AI 将替代传统搜索丨日报

RTE开发者社区

30k 的Java面试题,哭着也要背完!(附答案)

Geek_Yin

Java 程序员 Java 面试 Java 面试题

最全Java面试题及答案整理(2025最新版)

Geek_Yin

Java 程序员 Java 面试 Java面试题

决胜 Next.js 面试:深入剖析缓存机制

溪抱鱼

面试 Nex 缓存机制

以正合,以奇胜,曙光信创公有云的兵法之道

脑极体

AI

Web前端入门:JavaScript 运算符 == 和 === 有什么区别?

电子尖叫食人鱼

JavaScript 前端

AI in Game,大模型能力与实时音视频技术融合,交出AI应用新答卷

腾讯云音视频

AI 实时音视频 GME

快收藏!一个技巧从此不再搞混缓存穿透和缓存击穿

量贩潮汐·WholesaleTide

缓存

什么是低代码开发平台?2025年最热门的10大低代码开发平台盘点!

优秀

低代码 低代码开发平台 低代码平台

Disruptor—核心源码实现分析(二)

不在线第一只蜗牛

Java

华南会议|AI驱动仿真未来 2025 Altair区域技术交流会华南站,报名开启!

Altair RapidMiner

人工智能 AI 汽车 数字孪生 CAE

不同数据场景下的聚类算法

量贩潮汐·WholesaleTide

机器学习 算法

如何通过ETL对WebService进行调用

谷云科技RestCloud

数据库 数据仓库 WebService ETL 数据集成

开源鸿蒙开发者大会2025交流区亮点纷呈,社区与生态伙伴共绘智能图景

极客天地

AI赋能引爆短剧全球化风潮,腾讯云媒体处理助力短剧平台出海吸金

腾讯云音视频

AI 出海 媒体智能

以去中心化云计算角度,看杭州全球首场人形机器人格斗赛

PowerVerse

人工智能 AI 去中心化云算力

应该如何理解“数据驱动”?

优秀

数据挖掘 数字化转型 数据驱动

技术流必备!京东商品列表 API 接口深度解读

tbapi

京东API 京东商品列表接口

智启未来 | 拓维信息携旗下开鸿智谷受邀参加开源鸿蒙开发者大会2025

极客天地

《算法导论(第4版)》阅读笔记:p156-p161

codists

算法

AI赋能引爆短剧全球化风潮,腾讯云媒体处理助力短剧平台出海吸金

腾讯云音视频

出海

理解AI工作负载与SSD在性能中的关键作用

ScaleFlux

人工智能 大数据 cpu 存储 企业级NVMeSSD

FlagOS 新里程:开源面向多种硬件架构的统一AI 编译器 FlagTree

智源研究院

联想重磅发布三大硬核数据网络新品,打造"一横五纵"战略智能底座

新消费日报

华为仓颉语言初识:并发编程之线程的基本使用

IT小码哥

鸿蒙 Ability harmony harmoyos

《独立开发工具 • 半月刊》 第 003 期

Immerse

什么是信息化?什么是数字化?这两者有什么联系和区别?

优秀

数字化转型 数字化 信息化

诚迈科技携HongZOS亮相开源鸿蒙开发者大会,加速生态繁荣与产业跃迁

极客天地

修复.NET的HttpClient_.NET_Jonathan Allen_InfoQ精选文章