除了 .Net 核心之外,如何在 .net 框架中实现 IHttpClientFactory?

Tus*_*ali 10 c#-4.0 asp.net-core-2.0

在 .Net core 中,我们可以使用 IHttpClientFactory 在运行时注入和使用。作为开发人员,我无需担心依赖项解析。我只需要在服务集合中指定 AddHttpClient() 。同样,如何在 WPF 应用程序、.net 框架 4.6.1 中使用 IHttpClientFactory?由于没有可用于 WPF 应用程序的服务集合,因此不了解如何解决依赖关系。

Pan*_*vos 13

您可以将Microsoft.Extensions.Http NuGet 包添加到任何符合 .NET Standard 2.0 的项目。这包括面向 .NET 4.6.1 的项目

所有 Microsoft.Extensions.* 包都是 .NET Standard 2.0 包,这意味着您可以使用与 .NET Core 相同的配置、依赖注入、日志记录服务。

Microsoft.Extensions.Http提供 HttpClientFactory ,而不是新优化的 HttpClient。这仅在 .NET Core 2.1 中可用

  • 解释“IHttpClientFactory”的文章表示,问题是 **.NET Core** 中默认的“HttpClient”(没有提及 .NET Framework)将导致套接字耗尽问题 - .NET 中默认的“HttpClient”会导致套接字耗尽问题吗? Framework 4.8有没有这个问题?如果没有,那么就不需要在 .NET Framework 项目中使用“IHttpClientFactory”,并且它们可以使用长寿命的单例“HttpClient”实例,不是吗? (3认同)
  • @Topman 它说“如果为每个请求创建一个新的客户端实例,则可以耗尽可用的套接字。” 您不想为每个请求创建一个新的 HttpClient,因为您会耗尽套接字。 (3认同)
  • @Dai 我认为这两个实现中都存在问题。[4.8](https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev16.查询%3FappId%3DDev16IDEF1%26l%3DEN-US%26k%3Dk(System.Net.Http.HttpClient)%3Bk(SolutionItemsProject)%3Bk(SolutionItemsProject)%3Bk(TargetFrameworkMoniker-.NETFramework%2CVersion%3Dv4.8)%3Bk (DevLang-csharp)%26rd%3Dtrue%26f%3D255%26MSPPError%3D-2147217396&view=netframework-4.8#remarks) 和 3.1 文档提到了这个问题。无法链接两个网址太长。不进行测试,使用工厂更安全。 (2认同)
  • @Dai 不 - 事实上问题与此相反。套接字耗尽是[当您*不*重用实例时引起的](https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/)。在您处理等待任何剩余远程数据包的 HttpClient 后,操作系统会将套接字保留最多 240 秒。当您重用实例时,您将*套接字*重用到特定的*机器*,这意味着[任何 DNS 更改都将被错过](https://josef.codes/you-are-probously-still-using-httpclient-wrong -它会破坏你的软件的稳定性/) (2认同)