修复.NET的HttpClient
\看新闻很累?看技术新闻更累?试试下载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
修复.NET的HttpClient的更多相关文章
- C# 中 ConfigureAwait 相关答疑FAQ
C# 中 ConfigureAwait 相关答疑FAQ 在前段时间经常看到园子里有一些文章讨论到 ConfigureAwait,刚好今天在微软官方博客看到了 Stephen Toub 前不久的一篇答疑 ...
- 【开源】我和 JAP(JA Plus) 的故事
JA Plus 故事 程序员的故事如此简单之绕不过去的开源情结 我们准备做一件伟大的事,也可以说是一件真真正正普惠的事. 絮 是的,你没有看错,就是"絮"而非"序&quo ...
- android和httpClient
一.说起来都是泪 各大组织不同步,可是我想用别人的库. 二.谷歌和阿帕奇的爱恨情仇 初,谷歌安卓新出,库中自带HttpClient 4.0测试预览版.为与安卓保持API同步,HTTPClient不敢大 ...
- HTTP访问的两种方式(HttpClient+HttpURLConnection)整合汇总对比(转)
在Android上http 操作类有两种,分别是HttpClient和HttpURLConnection,其中两个类的详细介绍可以问度娘. HttpClient: HttpClient是Apache ...
- HttpClient, 使用C#操作Web
我们知道, .Net类库里提供了HttpWebRequest等类,方便我们编程与Web服务器进行交互. 但是实际使用中我们经常会遇到以下需求,基础类里没有直接提供相应的功能(WebClient类包含这 ...
- android 6.0 SDK中删除HttpClient的相关类的解决方法
一.出现的情况 在eclipse或 android studio开发, 设置android SDK的编译版本为23时,且使用了httpClient相关类的库项目:如android-async-http ...
- HTTP访问的两种方式(HttpClient+HttpURLConnection)整合汇总对比
HttpClient: HttpClient是Apache Jakarta Common下的子项目,用来提供高效的.最新的.功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版 ...
- HttpClient和HttpURLConnection整合汇总对比
性能 1.HttpUrlConnection直接支持GZIP压缩:HttpClient也支持,但要自己写代码处理. 2.HttpUrlConnection直接支持系统级连接池,即打开的连接不会直接关闭 ...
- grails下的httpclient
httpclient已经发布到4.3版本了,其中的API发生了巨大的变化,尤其是对于关闭连接显得更加容易理解,比如引入了CloseableHttpResponse. 然而grails2.3.2中自带了 ...
随机推荐
- Mongo日期
当通过mongo shell来插入日期类型数据时,使用new Date()和使用Date()是不一样的: > db.tianyc04.insert({mark:, mark_time:new D ...
- mysql搭建主从复制(一主一从,双主双从)
主从复制原理 Mysql 中有一个binlog 二进制日志,这个日志会记录下所有修改了的SQL 语句,从服务器把主服务器上的binlog二进制日志在指定的位置开始复制主服务器所进行修改的语句到从服务器 ...
- MyBatis(四):SqlSession及其工厂类的作用域和生命周期
本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出1便就懂!b站搜索狂神说即可 https://space.bilibili.com/95256449?spm_id_from=333.788 ...
- VUE_shop(第十天)项目的打包优化
项目的打包优化 1.添加页面的加载效果 1.首先安装运行依赖nprocess,在main.js文件中的axios拦截器拦截请求的时候调用Npeocees.start. 在拦截响应的时候调用nproce ...
- MySQL入门,第六部分,关系代数
关系代数是一种集合操作为基础过程化查询语言,特点:运算对象是关系,运算结果亦为关系 一.关系代数的特点 运算对象:关系 运算结果:关系 运算符:四类 集合运算符 专门的关系运算符 算术比较符 逻辑运算 ...
- jvm入门及理解(三)——运行时数据区(程序计数器+本地方法栈)
一.内存与线程 内存: 内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行.JVM内存布局规定了JAVA在运行过程中内存申请.分配.管理的策略,保证了JVM的 ...
- 超详细Go语言源码目录说明
开源项目「go home」聚焦Go语言技术栈与面试题,以协助Gopher登上更大的舞台,欢迎go home~ 导读 学习Go语言源码的第一步就是了解先了解它的目录结构,你对它的源码目录了解多少呢?今天 ...
- Delphi Unicode转中文
function UniCode2GB(S : String):String;Var I: Integer;beginI := Length(S);while I >=4 do begintry ...
- C#开发BIMFACE系列32 服务端API之模型对比3:批量获取模型对比状态
系列目录 [已更新最新开发文章,点击查看详细] 在<C#开发BIMFACE系列31 服务端API之模型对比2:获取模型对比状态>中介绍了根据对比ID,获取一笔记录的对比状态.由于模 ...
- SUCTF 2019 Upload labs 2 踩坑记录
SUCTF 2019 Upload labs 2 踩坑记录 题目地址 : https://github.com/team-su/SUCTF-2019/tree/master/Web/Upload La ...