写点什么

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

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

关注

评论

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

Mac电脑风扇控制软件:Macs Fan Control Pro 授权激活版

Rose

暗黑破坏神II:狱火重生(暗黑破坏神2重制版)/毁灭之王中文版 Mac/win

Rose

软件测试过程中的痛点思考

老张

提升效率 质量保障

算法人生(3):从“贪心算法”看“战胜拖延”(完美主义版)

养心进行时

算法 拖延症 贪心算法 走出拖延 拖延

算法人生(4):从“选项学习”看“战胜拖延”(担心失败版)

养心进行时

算法 强化学习 走出拖延 拖延 选项学习

算法人生(5):从“元学习”看“战胜拖延”(没兴趣版)

养心进行时

机器学习 算法 元学习 走出拖延 拖延

RWA会成为下一个风口吗?有哪些值得关注的项目?

区块链软件开发推广运营

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

GaussDB细粒度资源管控技术透视

华为云开发者联盟

数据库 华为云 华为云GaussDB 华为云开发者联盟 企业号2024年5月PK榜

算法人生(1):从“强化学习”看如何“战胜拖延”

养心进行时

算法 拖延症 强化学习 走出拖延 拖延

算法人生(8):从“注意力算法”看“战胜拖延”(被分心太多版)

养心进行时

深度学习 算法 走出拖延 拖延 注意力算法

魔兽争霸3冰封王座Warcraft III for mac 解除8M地图限制v1.24.0中文

Rose

「参数」让流水线动起来

都广科技

DevOps

测试答疑助手:从需求文档到设计文档、测试用例的完整测试过程

霍格沃兹测试开发学社

ChatGPT-5最新消息;预计包含Sora模型;附最新使用教程

蓉蓉

openai ChatGPT4

大模型驱动的新一代 BI 平台,Sugar BI 开启智慧决策新模式

百度Geek说

企业号 5 月 PK 榜 Sugar BI 企业号2024年5月PK榜

一文盘点 Partisia Blockchain 生态 4 月市场进展

西柚子

算法人生(7):从“时间折扣策略”看“战胜拖延”(等待最佳时机版)

养心进行时

算法 强化学习 走出拖延 拖延 时间折扣

算法人生(9):从“贝叶斯更新”看“战胜拖延”(消极预期版)

养心进行时

机器学习 算法 贝叶斯算法 走出拖延 拖延

云南等级保护测评机构有哪些?分别在哪里?

行云管家

等保 堡垒机 云南 等保测评机构

HBase Meta 元信息表修复实践

vivo互联网技术

HBase HBase meta表 HBase meta表修复

微软远程桌面连接工具,Remote Desktop下载 Mac远程软件

Rose

AnyGo for Mac(虚拟定位软件) 使用教程

Rose

一键自动化博客发布工具,用过的人都说好(cnblogs篇)

程序那些事

自动化 工具 程序那些事 自动发布

算法人生(6):从“反馈学习”看“战胜拖延”(被动攻击版)

养心进行时

算法 强化学习 走出拖延 拖延 反馈学习

Parallels Desktop 18 for Mac(Pd虚拟机) 18.3.2通用激活版

Rose

商品上新业务状态机接入实践

得物技术

Java 前端 企业号 2024年5月 PK 榜

算法人生(2):从“强化学习”看如何“活在当下”

养心进行时

算法 活在当下 强化学习

目前市面上堡垒机厂家有哪些?会帮忙部署吗?

行云管家

网络安全 数据安全 数据加密 堡垒机

关于Java Chassis 3的契约优先(API First)开发

EquatorCoco

Java Web API 开发语言

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