MSGraph bullk batching erroring "verbindingspoging is mislukt"

stemmen
0

Ik gebruik MSGraph batch rond 97.000 event items (meestal het creëren van events) naar MSGraph (slechts 10-15 items in elke partij aanvraag), maar het is met tussenpozen erroring wanneer ik probeer en ik krijg een A verbinding mislukt omdat de verbonden partij niet goed te reageren na een periode van tijd, of de gemaakte verbinding is mislukt omdat de verbonden host heeft nagelaten te antwoorden in mijn C # programma.

Het loopt succesvol te laten verlopen, en kan eender waar te krijgen van 3000 punten tot 65.000 in batches van 10-15 voordat het fouten, (zal het meestal ergens 17,000ish bereik fout.

Ik geloof niet dat het de vooruitzichten dienst grenzen zoals hier gezien https://docs.microsoft.com/en-us/graph/throttling#outlook-service-limits Zoals ik had het programma slaap gedurende 60 seconden voor elke 1000 individuele verzoeken

Hier is de code die ik gebruik:

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

        }
    }
}

Bedankt voor uw tijd

De vraag is gesteld op 19/03/2020 om 21:56
bron van user
In andere talen...                            

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