C# HttpClient使用模式与多用户的对比';曲奇饼

C# HttpClient使用模式与多用户的对比';曲奇饼,c#,dotnet-httpclient,C#,Dotnet Httpclient,根据: HttpClient旨在实例化一次,并在应用程序的整个生命周期中重用。 以下情况可能导致SocketException错误: 为每个请求创建一个新的HttpClient实例 服务器负载较重 我希望遵循这一指导原则,允许多个用户共享唯一的HttpClient实例,但是REST服务需要特定于用户的cookie(身份验证目的) 然后我在以下评论中发现了这一点: 然而,在关于.NETGithub的讨论中,我注意到问题不在于正在处理的HttpClient,而在于HttpClientHandle

根据:

HttpClient旨在实例化一次,并在应用程序的整个生命周期中重用。 以下情况可能导致SocketException错误:

  • 为每个请求创建一个新的HttpClient实例
  • 服务器负载较重
我希望遵循这一指导原则,允许多个用户共享唯一的
HttpClient
实例,但是REST服务需要特定于用户的cookie(身份验证目的)

然后我在以下评论中发现了这一点:

然而,在关于.NETGithub的讨论中,我注意到问题不在于正在处理的HttpClient,而在于HttpClientHandler

这意味着您可以经常实例化/处置
HttpClient
,只要您确保不会浪费
HttpClientHandler
实例。每个用户保留一个
HttpClientHandler
将允许我将不同用户的cookie分开,但这也无法消除上述问题

所以我想我的问题是:
以下真的是做到这一点的唯一方法吗?(想法再次取自一个回复)

  • 使用一个全局
    新HttpClient(新HttpClientHandler{UseCookies=false}}
  • 从身份验证响应的HTTP头中提取
    Set Cookie
    值,并按每个用户存储(“会话对象”)
  • 把这些饼干和每个单独的请求一起传递

这似乎非常不方便…

在任何给定时间,您希望有多少并发用户?除非有数千个并发用户,否则您不必担心端口耗尽。不要把建议走极端。您不想为每个请求创建一个
HttpClient
实例,但您应该可以为每个用户创建一个实例。我是尽管微软的文档中似乎有严格的建议,但我开始认为你是对的。问题是,由于我的代码不一定在服务类中运行,所以我不一定把他们的示例代码作为模板。更糟糕的是,如果资源成了问题,我总是可以自己处理身份验证/cookie/重定向非常感谢。