Microsoft Graph SDK для .NET автоматически обрабатывает ограничения скорости? - PullRequest
0 голосов
/ 21 сентября 2018

Microsoft ограничивает определенные конечные точки Graph до 10 000 запросов в 10 минут ( источник ).Если лимит достигнут, в заголовке Retry-After указывается время ожидания перед отправкой другого запроса.

Обрабатывается ли это автоматически Graph SDK?Если нет, какие шаги должен предпринять абонент?

1 Ответ

0 голосов
/ 21 сентября 2018

Я не верю, что Graph C # SDK автоматически повторяет попытку при ограничении запросов, но есть образец на https://github.com/venkateshchepuru/aspnet-webhooks-rest-sample/blob/87b1aa4967392096d22d382b7a8848bd9c0afeea/GraphWebhooks/Helpers/GraphHttpClient.cs, который показывает логику экспоненциального отката для 429 и 503 с.

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

Код для разбора повторной попытки после заголовка:

private TimeSpan GetServerRecommendedPause(HttpResponseMessage response)
    {
        var retryAfter = response?.Headers?.RetryAfter;
        if (retryAfter == null)
            return TimeSpan.Zero;

        return retryAfter.Date.HasValue
            ? retryAfter.Date.Value - DateTime.UtcNow
            : retryAfter.Delta.GetValueOrDefault(TimeSpan.Zero);
    }

Код дляопределение использования повторного заголовка или экспоненциального отката:

if (((int)response.StatusCode == 429) || ((int)response.StatusCode == 503))
            {
                // Retry Only After the server specified time period obtained from the response.
                TimeSpan pauseDuration = TimeSpan.FromSeconds(Math.Pow(2, attempt));
                TimeSpan serverRecommendedPauseDuration = GetServerRecommendedPause(response);
                if (serverRecommendedPauseDuration > pauseDuration)
                {
                    pauseDuration = serverRecommendedPauseDuration;
                }
...