Ошибка Azure SignalR: (429) слишком много запросов - PullRequest
1 голос
/ 17 мая 2019

Я использую Azure SignalR с проектом Asp.Net MVC API (с каркасом .net, а не с ядром .net).Я никогда не могу подключиться к службе Azure SignalR (пробовал любую возможную конфигурацию), пока все работает нормально, когда сигнализатор находится в автономном режиме.

Поскольку я включаю исключения CLR (на панели «Настройки исключений», проверяя все в Общих исключениях времени выполнения языка)Я продолжаю получать две следующие ошибки:

1.System.Net.WebException: 'Удаленный сервер возвратил ошибку: (429) Too Many Requests.'

2.System.Net.WebSockets.WebSocketException: «Невозможно подключиться к удаленному серверу».Внутреннее исключение WebException: удаленный сервер возвратил ошибку: (429) Too Many Requests.

Я использую уровень SignalR Free, но также пытался использовать уровень Standard и в результате получил те же результаты.

Я постоянно проверяю график «Соединение (макс.)» На вкладке «Обзор» на портале Azure и постоянно наблюдаю «Сервер 20, клиент 0».

При первом обнаружении ошибки я предположил, что ядействительно пытался подключиться слишком много раз, достиг максимального соединения / попытки и прекратил попытки.Через некоторое время (примерно 24 часа) я попробовал только три раза и все еще получал то же исключение (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.
                }
            );

Этот код выполняется на моем локальном компьютере, а не на AppService Azure.Однако он не будет работать и на 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" />

1 Ответ

1 голос
/ 20 мая 2019

Для каждой подписки и клиента Azure Resource Manager разрешает до 12 000 запросов на чтение в час и 1200 запросов на запись в час.Эти ограничения ограничены идентификатором участника, который делает запросы, и идентификатором подписки или идентификатором клиента.Если ваши запросы поступают из более чем одного основного идентификатора, ваш лимит по подписке или арендатору превышает 12 000 и 1200 в час.

Запросы применяются либо к вашей подписке, либо к вашему арендатору.Запросы на подписку включают передачу вашего идентификатора подписки, например, получение групп ресурсов в вашей подписке.Запросы арендатора не включают ваш идентификатор подписки, например, получение действительных расположений Azure.

Эти ограничения применяются к каждому экземпляру Azure Resource Manager.В каждом регионе Azure имеется несколько экземпляров, и Azure Resource Manager развернут во всех регионах Azure.Таким образом, на практике ограничения намного выше этих пределов, поскольку пользовательские запросы обычно обслуживаются многими различными экземплярами.

Если ваше приложение или сценарий достигает этих пределов, вам нужно ограничить свои запросы.В этой статье показано, как определить оставшиеся запросы, которые у вас есть до достижения предела, и как отвечать, когда вы достигнете предела.

Когда вы достигнете предела, вы получите код состояния HTTP 429 Слишком многозапросы.

Вы должны понимать и исследовать в своей инфраструктуре, что вы не сохраняете ни один открытый канал, который выполняет операцию чтения / записи в ресурсах Azure, как это иногда происходит.

Для понимания ивычисляя оставшийся лимит, вы можете обратиться к документу ниже.

, чтобы получить лимит чтения, вы можете запустить ниже сценария 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

...