当前位置: 首页 > news >正文

修复.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

相关文章:

  • 51nod1683
  • KPN iTV的敏捷转型之旅
  • 设计模式之禅之单例模式!
  • 纠纷判决已出,法官要求Uber归还所有Waymo自动驾驶机密文件
  • 10个最新交互式Web设计实例欣赏
  • VSCode建立.net core项目
  • 事物(物质)的存在形式:结构与运动、维度空间:结构-空间,运动-时间...
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 商城系统针对开发者自有支付系统提供的解决方案
  • 基于Redis实现分布式消息队列(4)
  • Java 多线程之线程池的使用
  • 5、React组件事件详解
  • Linksys WRT54G 路由器溢出漏洞分析—— 运行环境修复
  • 也谈链路劫持
  • kbasesrv篡改主页分析
  • Docker下部署自己的LNMP工作环境
  • js递归,无限分级树形折叠菜单
  • Linux Process Manage
  • nfs客户端进程变D,延伸linux的lock
  • Sass 快速入门教程
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • WebSocket使用
  • 复杂数据处理
  • 面试总结JavaScript篇
  • 一、python与pycharm的安装
  •  一套莫尔斯电报听写、翻译系统
  • #微信小程序:微信小程序常见的配置传旨
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (07)Hive——窗口函数详解
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C++20) consteval立即函数
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (二)换源+apt-get基础配置+搜狗拼音
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (五)Python 垃圾回收机制
  • (译)2019年前端性能优化清单 — 下篇
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)socket Aio demo
  • ***监测系统的构建(chkrootkit )
  • ./configure、make、make install 命令
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .Mobi域名介绍
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .net中我喜欢的两种验证码
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @软考考生,这份软考高分攻略你须知道