写点什么

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

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

关注

评论

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

手把手带你配置一个DHCP服务器 | 京东云技术团队

京东科技开发者

网络协议 服务器 Wireshark DHCP

使用函数计算,数禾如何实现高效的数据处理?

Serverless Devs

云计算 Serverless AIGC

AR + 通信,虚实结合让工作协同从线上到「现场」

融云 RongCloud

通信 AR 数字经济 远程协作 工作协同

office全套办公软件Microsoft Office LTSC 2021 v16.81beta版

iMac小白

SFTP工作方式及原理(大文件传输小知识)

镭速

文件传输协议 大文件传输软件

IT行业软件数据文件传输安全与高效是如何保障的?

镭速

大文件传输软件

Exploring Advanced WiFi 6 Solutions: QCN6122 vs. QCN6102 with IPQ5018 Platform

wallyslilly

ipq5018 QCN6102 QCN6122

RocksDB 在 vivo 消息推送系统中的实践

vivo互联网技术

RocksDB 消息推送系统 分布式数据存储模块

淘宝详情API接口在电商行业中的重要性及实时数据获取实现

Noah

16 | 二分查找(下):如何快速定位IP对应的省份地址

鲁米

图形化编程平台对比:iVX 与 Blockly/Scratch

代码生成器研究

NFTScan Labs:我们为什么要推出 L2 网络 Mint Blockchain?

NFT Research

NFT\ Layer 2

localhost工具:本地代码的远程之路 | 京东云技术团队

京东科技开发者

HTTP 内网穿透 go语言 localhost

测试用例设计方法六脉神剑——第二剑:招式组合,因果判定出世 | 京东物流技术团队

京东科技开发者

测试 因果图法 判定表法

如何使用区块链数据构建安全工具

Footprint Analytics

区块链 区块链技术 数据安全

华为云开源 | 线下meetup · 中国人民大学站顺利收官

华为云开源

区块链 微服务 时序数据库 AI大模型 前端组件库

合合信息旗下启信宝与鹏城实验室达成数据托管合作,“AI靶场”让数据管理更精准

合合技术团队

人工智能 数据处理 合合信息 启信宝

终于来啦!传奇世界之帝王传世详细图文架设教程

echeverra

传奇

15 | 二分查找(上):如何用最省内存的方式实现快速查找功能

鲁米

活动预告 | 中国数据库联盟(ACDU)中国行第四站定档西安,邀您探讨数据库前沿技术

墨天轮

数据库 postgresql oceanbase 国产数据库 KaiwuDB

轻松掌握!作为产品经理,手把手教你使用API接口获取拼多多商品详情

Noah

中企出海 | 引领全球税务治理,助力中企出海

用友BIP

中企全球化

深入解析LLaMA如何改进Transformer的底层结构

华为云开发者联盟

人工智能 华为云 大模型 华为云开发者联盟 LLM

浅析MySQL代价模型:告别盲目使用EXPLAIN,提前预知索引优化策略 | 京东云技术团队

京东科技开发者

MySQL 数据库 索引优化 EXPLAIN

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