写点什么

修复.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:002814
用户头像

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

关注

评论

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

从技术管理者到战略决策者,揭秘IT技术负责人的四个价值层次,看看您在第几层?

六边形架构

团队管理 技术战略 价值层次 价值提升

TinyEngine低代码多人实时协作“原理”+“实操”全攻略解读

OpenTiny社区

开源 前端 低代码 OpenTiny

极壳Hypershell完成7000万美元Pre-B及B轮融资,估值近4亿美元,引领消费级外骨骼新时代

财见

金融科技中网络安全的关键作用

qife122

区块链 网络安全

当推荐系统真正“懂你”:快手团队在NeurIPS 2025提出新成果TagCF

快手技术

NeurIPS 快手技术

【隐语Secretflow】一文速通隐私计算节点Domain

隐语SecretFlow

从客服到“数字员工”:天润融通AI如何接管连锁门店的后台运营

天润融通

AI 智慧检查综合管理平台:让质检管理从 “碎片化” 变 “全链路可控”

上海拔俗

新加坡跃居全球人才竞争力榜首

财见

AI存储大战,京东云海跑出中国速度

脑极体

AI

大数据-166 Apache Kylin 1.6 Streaming Cubing 实战:Kafka 到分钟级 OLAP

武子康

Java 大数据 kylin 分布式 Apache Kylin

我用Gemini3pro 造了个手控全息太阳系

知识浅谈

视觉交互 谷歌Gemini3

1688买家/卖家店铺订单API接口指南

Datafox(数据狐)

1688API 1688店铺订单API 1688店铺订单数据接口 1688店铺API

火山引擎多模态数据湖联合 AI 命令行工具 veCLI:用自然语言完成数据开发全流程

火山引擎开发者社区

赋能央企・技术升级:金仓数据库以自主可控引领关键系统焕新

鸽芷咕

数据库 金仓数据库

Spring Boot中使用Swagger3.0.0注解案例

刘大猫

人工智能 云计算 算法 物联网 大模型

Proofpoint Satori威胁情报代理正式登陆Microsoft Security Copilot平台

qife122

网络安全 AI安全

在线白板软件有哪些?8个主流工具盘点

职场工具箱

效率 在线白板 协同办公 办公软件 AI工具

碎片化网络安全监管正增加移动运营商成本与风险

财见

从分钟到秒级,从 ClickHouse 到 StarRocks:哈啰的实时进化之路

StarRocks

数据湖 OLAP Clickhouse StarRocks 哈啰

护士响应快了,患者心里踏实了:开源鸿蒙智慧病房的一线实探

最新动态

为什么同样用 AI,有的企业狂飙,有的原地踏步?

天润融通

剖析大模型产生幻觉的三大根源

Baihai IDP

程序员 AI LLM 大模型幻觉

集成亮数据代理IP到火狐浏览器实现数据采集

阿Q说代码

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