栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

如何在.NET Framework应用程序中使用HttpClientFactory

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在.NET Framework应用程序中使用HttpClientFactory

当我们搜索HttpClient的最佳实践时会了解到,HttpClient实例创建时会花费大量的资源用于创建HttpClientHandler实例,而且大量创建HttpClient实例还有可能造成socket端口全部耗尽的问题,所以有些开发人员会想到利用static变量来减少HttpClient的创建。但是static的HttpClient有存在无法适应DNS信息更新的问题,因此就引出了对于使用HttpClientFactory来管理HttpClient生命周期的建议。

在.NET Framework中使用HttpClientFactory,我们需要安装Microsoft.Extensions.Http和Microsoft.Extensions.DependencyInjection两个NuGet包,前者使我们可以使用HttpClientFactory,后者则使我们可以配置(configure)HttpClientFactory。如果,您还想通过Polly来进一步配置request,则还需安装Microsoft.Extensions.Http.Polly。

本文示例如何实现并配置一个Typed HttpClient。其实现的关键在于,我们需要自定义一个会使用到HttpClient实例的接口,之后在实现该接口时,将HttpClient实例作为参数传入其构造函数中。

using System.Net.Http;

namespace ConsoleApp
{
    public interface ICustomHttpClient
    {
        HttpClient HttpClient { get; }
    }
}
using System.Net.Http;

namespace ConsoleApp
{
    public class CustomHttpClient : ICustomHttpClient
    {
        public CustomHttpClient(HttpClient httpClient) => HttpClient = httpClient;
    
        public HttpClient HttpClient { get; }
    }
}

有了相关的自定义的HttpClient的接口和实现之后,我们就可以在Main函数中对我们所需的HttpClient进行配置并调用了。

using System.Net.Http;

namespace ConsoleApp
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var services = new ServiceCollection();
            services.AddHttpClient()
                    .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler { UseDefaultCredentials = true });

            var serviceProvider = services.BuildServiceProvider();
            var httpClient = serviceProvider.GetRequiredService().HttpClient;
            // your code to send http request
        }
    }
}

HttpClient并发处理Http请求的数量取决于其HttpClientHandler并发处理请求的数量,其默认值为2。我们可以根据应用的需求以及系统的性能,在主程序中通过设置ServicePointManager.DefaultConnectionLimit来对其进行调整。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/910621.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号