我们的服务应该是Singleton,Transient还是Scoped? (我们面临错误)

时间:2017-07-14 23:13:36

标签: asp.net azure asp.net-core

我们托管了许多用户访问的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

0 个答案:

没有答案
相关问题