我们可以在这里看到您错误地使用了 HTTPCLIENT,这会破坏您的软件的稳定性,我们不应该为每个 http 请求创建和处理 HttpClient。相反,它应该被缓存并重新使用...
我们可以在这里看到 你正在错误地使用 HTTPCLIENT,这会破坏你的软件的稳定性 的官方 .NET 文档中也是如此 HttpClient :
HttpClient 旨在实例化一次并在应用程序的整个生命周期内重复使用。为每个请求实例化一个 HttpClient 类将在重负载下耗尽可用的套接字数量。这将导致 SocketException 错误。以下是正确使用 HttpClient 的示例。
建议使用 HttpClientFactory,但查看之后:
public interface IHttpClientFactory
{
/// <summary>
/// Creates and configures an <see cref="T:System.Net.Http.HttpClient" /> instance using the configuration that corresponds
/// to the logical name specified by <paramref name="name" />.
/// </summary>
/// <param name="name">The logical name of the client to create.</param>
/// <returns>A new <see cref="T:System.Net.Http.HttpClient" /> instance.</returns>
/// <remarks>
/// <para>
/// Each call to <see cref="M:System.Net.Http.IHttpClientFactory.CreateClient(System.String)" /> is guaranteed to return a new <see cref="T:System.Net.Http.HttpClient" />
/// instance. Callers may cache the returned <see cref="T:System.Net.Http.HttpClient" /> instance indefinitely or surround
/// its use in a <langword>using</langword> block to dispose it when desired.
/// </para>
/// <para>
/// The default <see cref="T:System.Net.Http.IHttpClientFactory" /> implementation may cache the underlying
/// <see cref="T:System.Net.Http.HttpMessageHandler" /> instances to improve performance.
/// </para>
/// <para>
/// Callers are also free to mutate the returned <see cref="T:System.Net.Http.HttpClient" /> instance's public properties
/// as desired.
/// </para>
/// </remarks>
HttpClient CreateClient(string name);
}
它表示每个调用总是会创建一个 HttpClient 实例并且调用者可能会缓存它。
每次调用 IHttpClientFactory.CreateClient 都保证返回一个新的 HttpClient 实例。调用者可以无限期地缓存返回的实例,或者将其使用放在 using 块中,以便在需要时将其释放。
所以问题是我应该完全依赖 从中Factory 还是仍然应该 HttpClient HttpClient
在我们的项目中,我们每次发出请求时都使用 HttpClientFactory.CreateClient ,但他仍然会出现套接字异常。