写点什么

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

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

关注

评论

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

人工智能 | 手工测试用例转Web自动化测试生成

测试人

软件测试 软件测试面试

DeFi强势回归:新一轮DeFi牛市即将到来?

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 公链开发

助力降本增效,ByteHouse打造新一代云原生数据仓库

字节跳动数据平台

数据仓库 云原生 OLAP 降本增效

【免费大屏】JimuReport 积木仪表盘 v1.8.1 首个集成版本发布

JEECG低代码

获取淘宝商品详情数据api接口GET请求访问权限的条件

代码忍者

API 接口 pinduoduo API

mac苹果电脑虚拟机推荐:VMware Fusion Pro for Mac 下载

你的猪会飞吗

VMware Fusion Pro VMware Fusion Pro 13 mac VMware Fusion Pro 12

C2C交易系统开发DApp组成架构详解

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

精通Java并发锁机制:24种锁技巧+业务锁匹配方案(第二部分)

肖哥弹架构

Java 高并发

探索MySQL中VARCHAR(255)的演变及其对数据库设计的影响

Steven

Footprint Analytics 集成 Sui 区块链数据:助力 Move 生态系统的未来

Footprint Analytics

blockchain Sui

从零开始学机器学习——了解回归

不在线第一只蜗牛

机器学习

百度搜索结果波动的极致治理

百度Geek说

2024具身智能大会 | 网易伏羲负责人范长杰博士:群体智能引领AI通向物理世界

网易伏羲

人工智能 aop 网易伏羲 具身智能 群体智能

这个软件开发工具私活必备,后端程序员也能一键搞定各端APP、小程序

Onegun

finclip

仅需6步,实现虚拟物体在现实世界的精准放置

HarmonyOS SDK

HarmonyOS

域管理员账号被锁定解决办法

ServiceDesk_Plus

AD域 域管理

从API到数据:京东商品详情一键获取的奥秘

技术冰糖葫芦

API Gateway API 接口 API 测试 pinduoduo API

博睿数据受邀亮相NebulaGraph Meetup北京站

博睿数据

【程序大侠传】应用内存缓步攀升,告警如影随形

Disaster

《春江花月夜》Vivid菁彩视听版,开启一场美学视听盛宴!

最新动态

第三期安全AI挑战者计划-文本分类对抗攻击 第三名“我永远喜欢星野源”技术总结

阿里云天池

MLPerf 放榜,中国 AI 存储公司焱融科技斩获多项世界第一

焱融科技

AI 高性能存储 MLPerf

巧用时间换空间:解读 ArcGraph 如何灵活应对有限内存下的图分析

Fabarta

图数据库 图计算 图分析 #人工智能

CNCC | 从游戏AI到AOP :虚实融合助推新质生产力

网易伏羲

人工智能 aop 网易伏羲 游戏AI cncc

华为智慧屏 V5 Max 110发布!Audio & HDR Vivid畅享菁彩视听盛宴

最新动态

使用豆包MarsCode 实现高可用扫描工具

TRAE

人工智能 程序员 AI 开发 智能化

浅析数字孪生与数字卫星发展史

DevOps和数字孪生

卫星

程序员如何构建自己的话语体系?——用当量

思码逸研发效能

编程 程序员 软件开发 代码 绩效考核

合同管理中的常见陷阱,你是否也中招了?

天津汇柏科技有限公司

低代码 合同管理 AI 人工智能

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