写点什么

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

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

关注

评论

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

数据赋能业务,神州数码HR数字画像荣获2023HRoot人力资源管理卓越实践奖

科技热闻

国外服务器购买必备知识:如何避免常见陷阱?

一只扑棱蛾子

大模型训练,推动NLP发展的强大引擎

百度开发者中心

自然语言处理 大模型训练 #人工智能

软件开发全套资料整理下载(投标支撑,立项,研发,测试,实施维护,安全监测,服务巡检,结项,验收支撑)

代码人,代码魂

重庆上百位老师和学生,正在使用这个国产操作系统

OpenCloudOS

Linux 操作系统

HarmonyOS应用开发

不在线第一只蜗牛

华为 架构 系统 HarmonyOS

AutoCAD 2024 中文版 附 完整图文安装激活教程 支持M1

彩云

mac软件下载 AutoCAD 2024

软件测试/测试开发丨接口自动化学习笔记——请求方法构造

测试人

软件测试 接口测试

加密货币交易软件开发:树立行业新标准

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

大模型训练中的高性能计算与通信优化

百度开发者中心

深度学习 大模型 #人工智能

新手初探Amazon Lightsail,几步构建一个Wordpress服务器

王强

VPS云主机 亚马逊云服务器

SAE 2.0,让容器化应用开发更简单

Serverless Devs

云计算 负载均衡 Serverless

大模型时代,程序员的工作还是“写程序”?

飞算JavaAI开发助手

程序员 软件开发 AIGC java 技术提升

前端常用的开发工具有哪些?

互联网工科生

前端框架 前端开发工具 JNPF

立冬礼物已送达,小艺陪你开启“暖冬”模式

最新动态

Macos视频下载工具:Downie 4 支持M1

彩云

视频下载 downie 4

软件测试/测试开发丨接口自动化学习笔记——响应体断言

测试人

软件测试 接口测试

少林寺方丈释永信造访 Meta 总部;OpenAI 正在摧毁创业公司?丨 RTE 开发者日报 Vol.80

声网

杭州悦数出席 2023 云栖大会计算巢专场,分享云上最佳实践

最新动态

软件测试/测试开发丨接口测试学习笔记,TcpDump与WireShark

测试人

软件测试 接口测试

提速30%!HarmonyOS NEXT自动化测试开发效率提升

新消费日报

致敬记者节,合合信息扫描全能王助力新闻工作者构建“随身资料库”

合合技术团队

人工智能 合合信息 扫描全能王 记者节 新闻工作者

第三方数据测评对比五大品牌HTTP代理!哪家代理最纯净稳定

Geek_bf375d

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