背景:
我目前在 Azure 中托管一个具有以下规格的 ASP.NET 应用程序:
我有几个在服务上运行的后台作业,这些作业对第三方服务进行大量出站 HTTP 调用。
问题:
在小负载(大约每 10 秒 1 次调用)下,所有请求都在一秒钟内完成,没有任何问题。我遇到的问题是,在重负载下,当服务可以在 10 秒内进行多达 3/4 次调用时,某些请求将随机超时并引发异常。当我使用 RestSharp 时,异常会显示“操作已超时”。现在我正在使用 Flurl,异常显示为“调用超时”。
关键在于 - 如果我从运行 Windows 10 / Visual Studios 2017 的笔记本电脑运行相同的作业,则不会出现此问题。这让我相信我在托管环境中遇到了某些限制或耗尽了某些资源。不清楚这是否与连接/套接字或线程相关。
我尝试过的事情:
async/await防止锁定ServicePointManager连接限制设置这是我的startup.cs中的代码,我目前正在使用它来尝试防止此问题:
public class Startup
{
public Startup(IHostingEnvironment hostingEnvironment)
{
...
// ServicePointManager setup
ServicePointManager.UseNagleAlgorithm …Run Code Online (Sandbox Code Playgroud)