QuotaExceededException: Удаленный сервер возвратил ошибку: (403) Запрещено. Запрос был прерван, так как пространство имен XXX регулируется.

При попытке получить список регистраций для моего центра уведомлений я получаю следующую ошибку:

[QuotaExceededException: The remote server returned an error: (403) Forbidden. The request was terminated because the namespace XXX is being throttled. Please wait 60 seconds and try again. TrackingId:c7e05299-24ba-4f9d-9017-885db746a032_G20,TimeStamp:11/19/2014 9:00:51 PM]
   Microsoft.ServiceBus.Common.AsyncResult.End(IAsyncResult result) +624
   Microsoft.ServiceBus.Messaging.ServiceBusResourceOperations.EndGetAll(IAsyncResult asyncResult, String& continuationToken) +12
   Microsoft.ServiceBus.NamespaceManager.EndGetAllRegistrations(IAsyncResult result) +33
   System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization) +52

Это только тестовое приложение, поэтому количество устройств относительно невелико (~ 20), равно как и количество пользователей кода, выдающего исключение. Сообщение об ошибке явно указывает на то, что мы каким-то образом превышаем нашу квоту, но я не могу сказать, в каком аспекте — ни одна из метрик в центрах уведомлений не превышает 100 операций за предыдущие 24 часа. Количество доступных операций в день должно быть намного больше, чем мы используем.

На портале Azure нигде не отображается общее количество операций, поэтому я не знаю, как найти причину этой проблемы.

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

Есть ли способ (кроме платной поддержки Azure) узнать, почему меня ограничивают?


person Lance H    schedule 19.11.2014    source источник


Ответы (2)


Оказывается, в пакете NuGet для Microsoft.ServiceBus 2.1.2.0 есть ошибка, из-за которой вызов NotificationHubClient.GetAllRegistrations(10) неправильно извлекает только 10 первых регистраций, вместо этого он рекурсивно извлекает ВСЕ регистрации блоками по 10. В моем случае оказалось, что было 250 регистраций (большинство из них были старыми), поэтому вызов API выполнялся 25 раз подряд (~ 5 секунд), что объясняет исключение QuotaExceededException.

Исправление заключалось в обновлении до последнего пакета NuGet для Microsoft.ServiceBus — в настоящее время 2.5.2.0.

person Lance H    schedule 25.11.2014

Получение всех регистраций обрабатывается (и регулируется!) как аналитическая операция. Это означает, что он не должен использоваться в вашем основном потоке выполнения. Или другими словами - если приходится часто звонить, значит что-то не так...

Опишите ваше приложение более подробно, и я буду рад помочь определить хороший шаблон использования NH.

person efimovandr    schedule 20.11.2014
comment
Мы не используем Получить все регистрации в нашем основном потоке выполнения — мы используем его очень редко как часть отладки, почему принимается только часть отправляемых нами push-уведомлений (результаты случайны). На самом деле, насколько я мог судить (но не могу гарантировать), ошибка произошла при самом первом запросе к этому методу в течение нескольких дней, из-за чего у меня сложилось впечатление, что квота была разделена с каким-то другим процессом. - person Lance H; 20.11.2014
comment
Насколько мне известно, квота на все аналитические вызовы составляет 60 в минуту на каждое пространство имен. Таким образом, все концентраторы внутри вашего пространства имен разделяют его. Кроме того, если количество регистраций превышает 100, токен продолжения используется для получения следующей страницы (страниц), что вызывает дополнительные вызовы. Я так понимаю, у вас проблемы с получением уведомлений? Вы отправляете на устройства iOS? - person efimovandr; 20.11.2014
comment
Мы не должны приближаться к 60 в минуту - я отправил только один из этих запросов за 8-часовой период времени. Мы не используем токен продолжения. Да, мы отправляем на устройства iOS, а также в Windows Phone, Windows Store и Android. - person Lance H; 20.11.2014
comment
В этом случае троттлинг выглядит странно даже для меня. Только логи сервера могут помочь разобраться в чем дело... Но возвращаясь к изначальной проблеме со случайным пропаданием сообщений - это происходит только для iOS устройств? Я спрашиваю, потому что NH знает о проблеме с APNS. - person efimovandr; 21.11.2014
comment
Отсутствующие сообщения появляются как для iOS, так и для Android (в настоящее время я не могу подтвердить или опровергнуть проблемы с версиями Windows Phone / Store, извините). - person Lance H; 21.11.2014
comment
О какой известной проблеме вы говорите? Это - stackoverflow.com/questions/25789831/? - person Lance H; 21.11.2014
comment
Да. Но, похоже, это что-то другое, когда затронут и Android. - person efimovandr; 21.11.2014