MSGraph bullk dosificación erroring "intento de conexión"

votos
0

Estoy usando MSGraph a lote alrededor de 97.000 elementos de eventos (en su mayoría) la creación de eventos a MSGraph (sólo 10-15 artículos en cada solicitud por lotes), pero es erroring intermitentemente cuando estoy tratando y yo estoy poniendo un intento de conexión A no porque la parte conectada no respondió correctamente después de un período de tiempo, o conexión establecida fracasó porque host conectado no ha podido responder en mi programa en C #.

Se ejecuta ejecuta correctamente, y se puede conseguir en cualquier lugar de 3.000 a 65.000 artículos en lotes de 10-15 antes de que él los errores, (por lo general será error de rango algún lugar 17,000ish.

No creo que es de los límites de servicio de Outlook como se ve aquí https://docs.microsoft.com/en-us/graph/throttling#outlook-service-limits Como tuve el sueño programa durante 60 segundos por cada 1.000 persona peticiones

Aquí está el código que estoy usando:

 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;
            }

        }
    }
}

Gracias por tu tiempo

Publicado el 19/03/2020 a las 21:56
fuente por usuario
En otros idiomas...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more