写点什么

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

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

关注

评论

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

内推失败!

王磊

项目

全过程的区块链项目包装孵化都包含啥?

区块链项目一站式包装孵化

MobPush 安卓推送消息数据解析推荐实现

MobTech袤博科技

Java 开发者 产品动态

手把手教你玩转 Nginx 配置

伤感汤姆布利柏

MobPush扩展业务功能设置

MobTech袤博科技

Java 开发者 产品动态

公开课 | 提高测试用例编写效率,掌握经典用例设计技巧!

测吧(北京)科技有限公司

测试

淘宝/天猫商品详情API接口在电商数据整合中的作用

技术冰糖葫芦

API Explorer API 编排 API 文档

成为海量数据管理支柱:天谋科技与中科驭数完成兼容性互认证

Apache IoTDB

软件测试学习笔记丨JUnit5动态测试规则

测试人

软件测试

高效存储的秘诀:bitmap 数据结构在标签中的应用

袋鼠云数栈

数据结构 BitMap 标签 用户画像 标签体系

MobPush最佳实践——华为厂商离线消息排查

MobTech袤博科技

开发者,产品动态,java

新能源汽车车载充电机仿真技术,实验误差5%以内

Altair RapidMiner

汽车 仿真 altair 人工智能、

ai工具有哪些?国内外40款主流AI软件速览!

彭宏豪95

人工智能 职场 在线白板 AIGC AI生成PPT

一文读懂DNS解析原理、设置步骤、生效时间和常见问题

国科云

区块链项目包装孵化都包含哪些东西,一站式了解不迷路!

区块链项目一站式包装孵化

代币怎么上头像logo图标?TP钱包怎么上头像?技术帖扫盲(ave头像tp头像)

区块链项目一站式包装孵化

TapData 医疗美容行业数字化白皮书上线

tapdata

医疗美容机构数字化 医疗美容运营数据分析 医疗美容白皮书 医疗美容大数据中心

ETL数据集成丨使用ETLCloud实现MySQL与Greenplum数据同步

RestCloud

MySQL greenplum ETL 数据集成 ETLCloud

软工智库|低代码篇(二)——低代码开发平台内涵是什么?

电子标准院软工研究室

开源即正义,3D软件Blender设计指南

inBuilder低代码平台

开源 体验

MobPush for Uni-app

MobTech袤博科技

开发者,产品动态,java

区块链项目如何包装?点击查看详细流程

区块链项目一站式包装孵化

WAIC2024 | 澳鹏Appen期待与您共襄盛会!

澳鹏Appen

世界人工智能大会 WAIC

战略资讯 | TapData 牵手思想科技,开启数据管理新篇章!

tapdata

Tapdata 现代数据栈 思想科技 数字化解决方案

探索 Apache Paimon 在阿里智能引擎的应用场景

Apache Flink

大数据 flink paimon Apache Flink Apache Paimon

2024年ONLYOFFICE插件开发大赛已启动!

科技汇

智能制造背景下的低代码平台助力企业生产流程优化

不在线第一只蜗牛

低代码 制造业 智能化

服务端性能测试:行业流行性能监控工具介绍

测吧(北京)科技有限公司

测试

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