使用 WinHttpHandler 与 HttpClientHandler 在 Net Framework 上编写的应用程序
Posted
技术标签:
【中文标题】使用 WinHttpHandler 与 HttpClientHandler 在 Net Framework 上编写的应用程序【英文标题】:Usage WinHttpHandler vs HttpClientHandler for apps written on Net Framework 【发布时间】:2018-05-16 08:04:12 【问题描述】:我们可以在 HttpClient 中为 Net Framework 4.6.1+ 编写的应用程序使用至少 2 个处理程序,即:
HttpClientHandler(网络框架的一部分) WinHttpHandler(提供 通过 Nuget)没有文章通过下一个问题来比较它们:
性能对比 使用 DNS 转移(当 IP 用于 DNS FQDN 已更改) 连接租约超时(当 HttpClient 没有 自动缩放时自动移动到新实例)谁能分享你的使用经验WinHttpHandler?
【问题讨论】:
【参考方案1】:Karel Zikmund 回答了我的问题,你可以通过下一个url看到它
从 .NET Core 2.1 开始,HttpClientHandler 默认使用 SocketsHttpHandler - 基于套接字的新 C# 实现。
它的关键价值是跨平台的一致性和注重性能(尤其是针对 Linux/Mac 上的 CurlHandler)。
WinHttpHandler 是 winhttp 操作系统组件的包装器。如果您需要 HTTP/2,它是目前唯一的选择,因为 SocketsHttpHandler 还不支持 HTTP/2(参见 #23134)。
DNS 更改在两者上的行为相同,但是,您可以通过 SocketsHttpHandler.PooledConnectionLifetime 对其进行一些调整。
不支持 DNS TTL - 请参阅 #24257 和 #11224。解决方法是定期回收处理程序。您还可以使用更高级别的包装器HttpClientFactory,它会为您做到这一点(至少作为一种动力)。
【讨论】:
以上是关于使用 WinHttpHandler 与 HttpClientHandler 在 Net Framework 上编写的应用程序的主要内容,如果未能解决你的问题,请参考以下文章
使用 httpc lib 将大型 http 响应流式传输到 Erlang 中的磁盘