首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET核心与HttpClientFactory :最佳实践?

ASP.NET核心与HttpClientFactory :最佳实践?
EN

Stack Overflow用户
提问于 2021-12-09 21:16:16
回答 1查看 2.2K关注 0票数 1

我有一个ASP.NET核心应用程序,需要循环调用一个web服务。

我实例化了一个HostedService

代码语言:javascript
复制
public class MyHostedService : IHostedService
{
    public MyHostedService(IMyWebServiceClient MyWebServiceClient)
    {
      ...
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
       while (!cancellationToken.IsCancellationRequested)
       {
           var result = await myWebServiceClient.CallSomeWebApi();

           await Task.Delay(5000, cancellationToken);
       }

       return Task.CompletedTask;
    }
}

它从WebServiceClient类调用一些函数。全班都是这样的

代码语言:javascript
复制
public class MyWebServiceClient: IMyWebServiceClient
{
    private readonly IHttpClientFactory httpClientFactory;

    public MyWebServiceClient(IHttpClientFactory httpClientFactory)
    {
        this.httpClientFactory = httpClientFactory;
    }

    public async Task CallSomeWebApi()
    {
       using (var httpClient = httpClientFactory.CreateClient())
       {
           var requestMessage = new HttpRequestMessage(...);

           var response = await httpClient.SendAsync(requestMessage);
       }
    }
}

启动代码如下:

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    ....
    services.AddHttpClient();
    services.AddSingleton<IMyWebServiceClient, MyWebServiceClient>();
    services.AddHostedService<MyHostedService>();
    ....
}

有人能告诉我这是否是循环调用的好方法吗?

代码语言:javascript
复制
var httpClient = httpClientFactory.CreateClient()

(例如每5秒一次)?

会否因此而产生一些副作用?我正在使用一些Web服务器进行测试,并且经常得到异常

由于配置的HttpClient.Timeout时间为100秒,请求被取消。

这是否是由上述实现引起的,还是这肯定是服务器问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-09 21:57:02

您所得到的错误是因为客户端API调用在100秒后超时,这是默认的超时,因此这可能是服务器没有响应。

每5秒创建一个新的HttpClient应该很好。HttpClient实例封装了一个池化的HttpMessageHandler,因此它是轻量级的(与池处理程序相反)。处理它不会释放处理程序,否则会导致资源耗尽(客户端套接字不会立即释放)。

由于内部处理程序在默认情况下被配置为定期“刷新自身”以获取新的DNS信息,因此实际上不需要自己使用IHttpClientFactory。您可以使用类型化客户机直接注入HttpClient,如在IHttpClientFactory内核中使用ASP.NET发出HTTP请求中所述。文章使用IHttpClientFactory实现弹性HTTP请求还解释了在.NET中使用HttpClient的“最佳实践”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70296816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档