【问题标题】:DNN / 2SXC / Razor / c# / Consume External API with Reusable HttpClientDNN / 2SXC / Razor / c# / 使用可重用 HttpClient 使用外部 API
【发布时间】:2020-11-10 19:21:23
【问题描述】:

我正在使用 Razor 模板在 2SXC 中为 DNN 构建应用程序。我需要从几个外部 API 中提取一些数据,但担心在不同页面上使用许多 HttpClient 请求会导致套接字耗尽。

我已经研究过使用依赖注入并使用 IHttpClientFactory 创建类型化客户端,但 DNN 中的当前实现似乎不支持这一点。

是否有人对如何使用线程安全的 razor 模块创建和重用 HttpClient 对象有任何建议?

感谢您提供的任何指导!

【问题讨论】:

  • 我不知道你在做什么。您是否担心 your api 会被过于频繁地查询?或者您是否有一些代码会查询另一个 API,并且您担心您的服务器(充当 http 客户端)会导致连接过多?你担心的负载是什么?我真的想不出会造成这么多麻烦的场景。
  • 感谢您的回复!我担心作为客户端的外部 API(不是我的)的打开套接字的数量可能会导致套接字耗尽或性能/内存问题。我一直在参考几篇关于最佳实践的文章并遇到了这个 link

标签: c# razor httpclient dotnetnuke 2sxc


【解决方案1】:

只是我的 2c,但您所指的文章是针对 .net 核心的,适用于非常高负载的环境。所以我几乎可以肯定你的 DNN 端点可能不会有这个。

无论哪种方式:从进一步的研究来看,它看起来像

  1. 提到的 Socket-Exhaustion 是你的程序在它自己的系统上使用了套接字(所以不是远程 api,你的套接字被阻塞了一小段时间)
  2. 您可以轻松地使用单例 - 这对于 99% 的所有场景都可以(创建一个 static 变量。我读到的唯一缺点是它缓存 DNS,但如果您的远程端点总是同一台服务器,并且有像http://byterot.blogspot.com/2016/07/singleton-httpclient-dns.html这样的解决方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多