MSgraph bullktinging erroring "попытка подключения не удалась" - PullRequest
0 голосов
/ 19 марта 2020

Я использую MSgraph для пакетирования около 97 000 элементов событий (в основном, для создания событий) в msgraph (только 10-15 элементов в каждом пакетном запросе), но он выдает периодически возникающие ошибки, когда я пытаюсь, и я получаю, «Попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или не удалось установить соединение, потому что подключенный хост не ответил» в моей программе C#.

Он успешно запускается и может получить в любом месте от 3000 элементов до 65 000 в партиях по 10-15 до того, как произойдет ошибка (обычно это будет ошибка где-то в диапазоне 17 000i sh).

Я не верю, что это пределы сервиса Outlook, как показано здесь https://docs.microsoft.com/en-us/graph/throttling#outlook -service-limit Поскольку программа находилась в спящем режиме 60 секунд для каждых 1000 индивидуальных запросов

Вот код, который я использую:

 List<EventBatchDetail> EventDetailList; //list of events to be put into outlook 

foreach (var batchRequestchunk in EventDetailList.ChunkBy(10))
{

    var graphServiceClient = new GraphServiceClient(new DelegateAuthenticationProvider((requestMessage) => {
        requestMessage.Headers.Add("Authorization", token);
        requestMessage.Headers.Add("Prefer", "outlook.timezone=\"Pacific/Auckland\"");
        requestMessage.Headers.Add("Connection", "Keep-Alive");

        return Task.FromResult(0);
    }));

    using (var batchRequest = new HttpRequestMessage(HttpMethod.Post, "https://graph.microsoft.com/v1.0/$batch"))
    {

        BatchRequestContent batchRequestContent = new BatchRequestContent();
        foreach (var batchRequestStep in batchRequestchunk)
        {
            batchRequestContent.AddBatchRequestStep(batchRequestStep.BatchRequest);
        }

        batchRequest.Content = batchRequestContent;
        token = await StaticAzureToken.Token.GetToken();

        await graphServiceClient.AuthenticationProvider.AuthenticateRequestAsync(batchRequest);

        using (var httpClient = new HttpClient())
        {
            httpClient.Timeout = new TimeSpan(0, 5, 0);
            httpClient.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
            HttpResponseMessage batchResponse;

            try
            {
                var tempthing = await httpClient.SendAsync(batchRequest);
                batchResponse = tempthing;

                //3. Process response
                if (!batchResponse.IsSuccessStatusCode)
                {
                    Console.WriteLine($"Bad batch responce code {batchResponse.StatusCode} {(int)batchResponse.StatusCode}");
                }

                var batchResponseContent = new BatchResponseContent(batchResponse);
                var responses = await batchResponseContent.GetResponsesAsync();
                string asdf = "";
                foreach (var response in responses)
                {
                    EventBatchDetail aaa = batchRequestchunk.Find(x => x.BatchRequest.RequestId.Equals(response.Key));
                    asdf = $"{aaa.Status}: {aaa.UserEmail} {aaa.Eventdetail.Subject}  {aaa.Eventdetail.Start.DateTime} ID:{response.Key} Status:{(int)response.Value.StatusCode}";
                    if (response.Value.IsSuccessStatusCode)
                    {
                        Utils.LoggIt($"{asdf}", ConsoleColor.Green);
                    }
                    else
                    {
                        Utils.LoggIt($"{asdf}", ConsoleColor.Red);
                    }
                }

            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
                Console.WriteLine(ex.InnerException.ToString());

                batchResponse = null;
            }

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...