Azure SignalR错误:(429)太多请求

时间:2019-05-17 12:59:16

标签: c# azure signalr azure-signalr

我正在将Azure SignalR与Asp.Net MVC API(.net框架而非.net核心)一起使用。我永远无法连接到Azure的SignalR服务(尝试任何可能的配置),而当Signalr自行托管时一切正常。

当我启用CLR异常时(通过在“公共语言运行时异常”下检查所有内容,在“异常设置”窗格下),我不断收到以下两个错误:

1。 System.Net.WebException:'远程服务器返回错误:(429)请求太多。'

2。 System.Net.WebSockets.WebSocketException:'无法连接到远程服务器'。 内部异常 WebException:远程服务器返回错误:(429)请求太多。

我使用的是SignalR Free层,但也尝试使用Standard层,最终得到了相同的结果。

我一直检查Azure门户“概述”选项卡下的“连接(最大)”图,并一直观察“服务器20,客户端0”。

第一次遇到错误时,我以为我确实尝试过多次连接,并达到最大连接/尝试次数,因此放弃尝试。一段时间(大约24小时)后,我只尝试了3次,仍然遇到相同的异常(429-请求过多)。

这是我的配置(在Startup.cs中):

app.MapAzureSignalR(
                "/signalr",
                GetType().FullName,
                new HubConfiguration
                {
                    // tried all combinations of boolean values below.
                    EnableDetailedErrors = true,
                    EnableJSONP = true,
                    EnableJavaScriptProxies = true
                }, options =>
                {
                    options.ConnectionCount = 5; // tried increasing and decreasing that number.
                    options.ConnectionString = "<my connection string from azure portal signalr service>";
                    options.AccessTokenLifetime = TimeSpan.FromDays(1); // tried even removing.
                }
            );

此代码在我的本地计算机上运行,​​而不在Azure的AppService上运行。但是,它也不会在AppService上运行。因为在本地计算机上调试更容易,所以我一直在尝试在本地计算机上进行调试。

我在互联网上进行搜索,但未发现与我的问题相关的任何内容。

我该如何解决问题?

编辑: 我安装了以下软件包。

<package id="Microsoft.AspNet.SignalR" version="2.4.1" targetFramework="net472" />
<package id="Microsoft.AspNet.SignalR.Core" version="2.4.1" targetFramework="net472" />
<package id="Microsoft.AspNet.SignalR.JS" version="2.4.1" targetFramework="net472" />

2 个答案:

答案 0 :(得分:1)

对于每个Azure订阅和租户,资源管理器每小时最多允许12,000个读取请求和每小时1200个写入请求。这些限制的范围是发出请求的主体ID和订阅ID或租户ID。如果您的请求来自多个主体ID,则整个订阅或租户的限制为每小时12,000和1,200以上。

请求将应用于您的订阅或租户。订阅请求涉及传递您的订阅ID,例如检索订阅中的资源组。租户请求不包括您的订阅ID,例如检索有效的Azure位置。

这些限制适用于每个Azure资源管理器实例。每个Azure区域中都有多个实例,并且Azure资源管理器已部署到所有Azure区域。因此,实际上,限制实际上比这些限制要高得多,因为用户请求通常由许多不同的实例提供服务。

如果您的应用程序或脚本达到了这些限制,则需要限制您的请求。本文向您展示了如何确定在达到限制之前剩余的请求,以及在达到限制时如何响应。

达到限制后,您会收到HTTP状态码429请求太多。

您需要在基础结构中进行了解和调查,以确保您不会在某个时候在天蓝色资源中保留任何正在执行读/写操作的打开通道。

要了解和计算剩余限额,请参阅以下文档。

要获得读取限制,可以在powershell脚本下运行

Get-AzResourceGroup -Debug

以及写限制

New-AzResourceGroup -Name myresourcegroup -Location westus -Debug

https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits#remaining-requests

https://github.com/Microsoft/csa-misc-utils/tree/master/psh-GetArmLimitsViaAPI

答案 1 :(得分:0)

已编辑

您在服务器端定义了多少hub个? AspNet SignalR的服务器连接数(hub count + 1) * options.ConnectionCount


对于免费实例,有2个维度限制:

  1. 并发连接数<= 20
  2. 每天发送的
  3. 总数邮件数量<= 20K(UTC时间每天12:00 AM刷新)。

标准层没有消息限制。

Here是Azure SignalR服务的定价详细信息。 Here详细说明了消息和连接的计算方式。