我正在研究在我的asp.net核心应用程序中使用IHttpClientFactory来调用外部app。我见过一些在服务类的构造函数中创建客户端工厂的示例。然后,该类的方法调用该客户端工厂来生成HttpClient的实例,以发出Http请求。如以下示例代码所示:
public class MyTransientService: IMyService
{
private readonly IHttpClientFactory _clientFactory;
public MyTransientService(
IHttpClientFactory clientFactory
)
{
_clientFactory = clientFactory;
}
public async Task<MyData> GetData()
{
//construct the request
var httpClient = _clientFactory.CreateClient();
var response = await client.SendAsync(request);
...
}
}如果服务在startup.cs中注册为瞬态服务,那么每次调用该服务时,不是都会生成一个新的HttpClientFactory实例吗?每个请求一个新的HttpClientFactory?那么,以下不是使用工厂的更有效的方法吗?
public class MyTransientService: IMyService
{
private readonly HttpClient _client;
public MyTransientService(
HtpClient client
)
{
_client = client;
}
public async Task<MyData> GetData()
{
Uri uri = new Uri(StaticUtils.AddQueryString(url, props));
var response = await _client.SendAsync(request);
...
}
}发布于 2020-09-18 04:17:02
我会认为自己创建HttpClient是一种糟糕的做法,在self中,你可以控制创建了多少。如果MyTransientService是暂时的,您将最终创建大量套接字连接(每个实例/请求一个套接字连接)创建HttpClient以供重用。
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient("hello", c =>
{
c.BaseAddress = new Uri("http://localhost:5000");
})
.AddTypedClient<MyTransientService>();
services.AddControllers();
}
public class MyTransientService: IMyService
{
private readonly HttpClient _client;
public MyTransientService(
HtpClient client
)
{
_client = client;
}
public async Task<MyData> GetData()
{
Uri uri = new Uri(StaticUtils.AddQueryString(url, props));
var response = await _client.SendAsync(request);
...
}
}https://stackoverflow.com/questions/63944823
复制相似问题