我们托管了许多用户访问的Asp.Net Core网站,并在Azure上托管。但是,我们很多次都会收到此错误并且应用程序出现故障:
'指定的CGI应用程序遇到错误,服务器终止了进程'
联系Microsoft后,我们发现应用程序通过端口443进行了大量的HTTPS调用,并且超出了允许的最大出站连接数。
我们使用HTTPS发送护照重置电子邮件,Redis缓存,Azure云存储上传和发送Firebase通知。 Redis以静态方法处理
我们在Startup.CS中声明其他服务:
services.AddSingleton<ClientService>();
services.AddSingleton<UploaderService>();
services.AddSingleton<SharingService>();
services.AddSingleton<EmailSMSUtility>();
services.AddSingleton<PushNotificationUtility>();
我们认为将这些服务更改为Scoped或Transient可能会有所帮助。你能否建议我们是否可以对其中任何一个做到这一点,如果这有助于解决问题?
非常感谢
更新:请参阅下面的支持工程师回复:
在发生错误时,我们会看到大量的出站连接 端口443(HTTPS连接)。您的网站正在运行 实例。在大型实例中,您只能有8192出站 在任何时间连接。由于您的大部分配额都是由您使用的 应用程序,没有新的传入请求的空间。那就是 原因是,新的传入请求正在获得HTTP 502.3。我不 相信您的应用程序中存在套接字泄漏。因为 加载,您的网站正在进行大量的出站连接和 关闭他们。如果您的网站和每个请求的负载都很高 开始拨打电话,你就会越来越近了 出站配额,因此新的传入请求将有问题, 最终用户将开始看到HTTP 502.3错误。你能检查一下吗? 您的代码,并查看您在端口上与哪个外部资源进行通信 443.如果您使用.NET HTTPClient进行这些HTTPS调用,请确保使用静态对象(而不是每次都创建一个新实例) 时间)。 HTTPClient的静态对象将重用套接字连接: https://stackoverflow.com/a/22561368