Używam MSGraph do partii około 97000 pozycji zdarzeń (głównie) do tworzenia wydarzeń MSGraph (tylko 10-15 sztuk w każdym żądaniu wsadowym), ale jest przerywany erroring gdy próbuję i Dostaję „Połączenie próba nie powiodła się ponieważ połączony strona nie odpowiedziała poprawnie po pewnym czasie, lub ustanowione połączenie nie powiodło się, ponieważ połączony host nie odpowiedział”w moim C # programu.
Prowadzi z powodzeniem uruchomić i można dostać gdziekolwiek od 3000 do 65.000 pozycji w partiach 10-15 przed nim błędów (zwykle będzie błędu gdzieś 17,000ish zakres.
Nie wierzę w to limity serwisowe perspektywy jak widać tutaj https://docs.microsoft.com/en-us/graph/throttling#outlook-service-limits Jak miałem sen programu przez 60 sekund dla każdego osobnika 1000 upraszanie
Oto kod używam:
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;
}
}
}
}
Dziękuję za Twój czas