在ASP.NET Core应用程序中使用多个HttpClient对象

问题描述 投票:3回答:1

[当有多个客户端(公司)使用ASP.NET Core应用程序并且必须为每个这些公司在ASP.NET应用程序中维护带有相应客户端证书的HttpClient的单独实例时,最佳的应用程序设计是什么?] >

首先,关于应用程序的一些重要事实:

  • 这是一个ASP.NET Core 3.1应用程序。
  • 每个使用此ASP.NET Core应用程序的公司都需要先上传自己的客户端证书在注册过程中。证书和对应的密码是存储在数据库中。证书是必要的沟通带有一些外部Web服务,必须代表该公司在该公司中执行了某些操作提到了ASP.NET Core应用程序。换句话说,对于某些动作公司在ASP.NET Core应用程序中执行某些外部Web服务必须使用POST方法和相应的主体进行通知,并且其响应必须得到处理并返回。
  • 注册后,公司可以开始将请求发送到提到的ASP.NET Core应用。此ASP.NET Core应用程序应获取从数据库中获取相应的公司证书,创建HttpClient对象并向其添加证书,准备请求数据并为其调用外部Web服务通知。然后,该外部Web服务的响应应该是已处理并作为对原始公司要求的回复返回。
  • [当然,可能有来自不同公司的同时请求,但是也可能有来自不同公司办公室的同一公司的同时请求-来自同一公司的所有请求都使用相同的公司客户证书,但请求数据(正文)通知外部Web服务将始终是不同的。
  • 据我所知,对于每次对外部Web服务的调用都创建新的HttpClient对象不是最佳实践。我考虑过HttpClientFactory,但就我而言,每个HttpClient对象必须包含公司的相应客户端证书。我知道ASP.NET Core支持命名HttpClient来为每个公司维护单独的HttpClient,但是AFAIK这个命名客户端只能在Startup类中创建。这还不够,因为可以在ASP.NET应用程序运行时随时注册新公司,公司可以在应用程序运行时上载新证书,从而使现有的命名客户端无效,等等。

我正在考虑为每个公司维护一个包含一个HttpClient对象的静态列表。首次提出对公司的请求时,将使用相应的客户端证书创建新的HttpClient并将其添加到此列表中。对于来自同一公司(或办公室)的所有后续请求,从提到的静态列表中获取相应的HttpClient并重新使用。当然,我将必须在公司的HttpClient实例上建立一些锁定,以便在同一公司同时发出请求的情况下它不会中断。我对这种设计有一个担心,就是可能会有数百家公司,而且HTTP客户列表可能会很长。

您还有其他想法或建议吗?

[当有多个客户端(公司)使用ASP.NET Core应用程序以及带有相应客户端的HttpClient的单独实例时,最好的应用程序设计是什么……]

asp.net-core .net-core dotnet-httpclient
1个回答
0
投票

我正在考虑为每个公司维护一个包含一个HttpClient对象的静态列表。

© www.soinside.com 2019 - 2024. All rights reserved.