\

看新闻很累?看技术新闻更累?试试下载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相关推荐

  1. 【开源】我和 JAP(JA Plus) 的故事

    JA Plus 故事 程序员的故事如此简单之绕不过去的开源情结 我们准备做一件伟大的事,也可以说是一件真真正正普惠的事. 絮 是的,你没有看错,就是"絮"而非"序&quo ...

  2. 使用await / async时,HttpClient.GetAsync(...)永远不会返回

    本文翻译自:HttpClient.GetAsync(-) never returns when using await/async Edit: This question looks like it ...

  3. 通过HTTPS使用HttpClient信任所有证书

    最近在Https上发布了有关HttpClient的问题( 在此处找到 ). 我取得了一些进展,但遇到了新问题. 与我的最后一个问题一样,我似乎找不到任何适合我的示例. 基本上,我希望我的客户端接受任何 ...

  4. HttpClient, 使用C#操作Web

    我们知道, .Net类库里提供了HttpWebRequest等类,方便我们编程与Web服务器进行交互. 但是实际使用中我们经常会遇到以下需求,基础类里没有直接提供相应的功能(WebClient类包含这 ...

  5. 我又踩坑了!如何为HttpClient请求设置Content-Type标头?

    最近在重构认证代码,认证过程相当常规: POST /open-api/v1/user-info?client_id&timstamp&rd=12345&sign=***& ...

  6. 小心 HttpClient 中的 FormUrlEncodeContent 的 bug

    小心 HttpClient 中的 FormUrlEncodeContent 的 bug Intro 最近发现活动室预约项目里的上传图片有时候会有问题,周末找时间测试了一下,发现小图片的上传没问题,大图 ...

  7. .NET HttpClient的缺陷和文档错误让开发人员倍感沮丧

    设计错误.缺陷及文档错误等导致正确使用.NET HttpClient变得出奇地困难.所以,即使是生产环境中看似运行正常的应用程序,在负荷不满的情况下,也遭受着性能问题和运行时故障. 来自ASP.NET ...

  8. asp.net通过webservice调用java接口全过程_100-RPC、RMI、WebService、httpClient、跨域、集群部署...

    1. RPC技术介绍_单体架构_SOA架构 (1) 什么是单体架构 一个归档包(例如 war 格式或者 Jar 格式)包含了应用所有功能的应用程序,我们通常称之为单体应用.也称之为单体应用架构,这是一 ...

  9. android和httpClient

    一.说起来都是泪 各大组织不同步,可是我想用别人的库. 二.谷歌和阿帕奇的爱恨情仇 初,谷歌安卓新出,库中自带HttpClient 4.0测试预览版.为与安卓保持API同步,HTTPClient不敢大 ...

最新文章

  1. 中国的数据科学家阶层正在形成
  2. 以计算机为主题的英语作文范例,myfamily英语作文范文示例
  3. linux中的httpd源码安装方法
  4. c++如何对结构体作为形参设置默认值
  5. ubuntu常见问题总结
  6. 模拟滤波器的单位冲激响应+单位阶跃响应+斜坡响应+抛物线响应matlab实现(转载+整理)
  7. cad转dxf格式文件太大_想知道DWG、DWT、DWS和DXF是什么吗?从了解4种CAD图形格式开始吧...
  8. 保障了罗振宇跨年演讲的PTS铂金版正式上线,产品体验全新升级
  9. Nodejs,Npm,React安装教程
  10. DatagridView 常用功能代码
  11. linux下安装gcc及设置多版本gcc多版本共存(如果enable静态库,会报错,不知道为什么,忽略静态库就没问题了)...
  12. 通过堡垒机登陆服务器脚本
  13. Java实现 LeetCode 514 自由之路
  14. 值得收藏的微软Windows系统蓝屏代码大全以及修复方法
  15. 摄像镜头型号参数分类
  16. IP签名档美化版api源码PHP
  17. 老司机通过后视镜辨别车距 完爆倒车影像功能
  18. C++游戏---皇后PK
  19. [Python从零到壹] 四十四.图像增强及运算篇之图像灰度线性变换详解
  20. 如何理解电容器容抗等效

热门文章

  1. Atitit. 查找linux 项目源码位置
  2. Selenium启动不同浏览器
  3. 一次无线网络故障排除过程
  4. ViewPager撤消左右滑动切换功能
  5. c#百度排名点击器编写 及webser 填表.
  6. 推荐65个以自然风光为背景的UI设计
  7. php null运算符,PHP7 Null合并运算符
  8. 分页插件php,文章内容分页插件
  9. mysql for循环_基于Swoole扩展开发异步高性能的MySQL代理服务器
  10. 苹果8参数_八年磨两苹果,日本精致农业“秘密” 打造不一样的智慧农业园区...