Исключение времени ожидания API Microsoft GraphC#

Место общения программистов C#
Ответить
Anonymous
 Исключение времени ожидания API Microsoft Graph

Сообщение Anonymous »

Я использую библиотеку Microsoft Graph API (C#) и мне интересно, сталкивался ли кто-нибудь с этим:

Многие из моих вызовов Graph API время от времени истекают.

Это может произойти с любым вызовом API, от получения текущего профиля пользователя до получения документов SharePoint и т. д.
Я пробовал обновить Microsoft Graph API и зависимые пакеты Nuget до последних версий, но это не помогает.

Для уточнения: это приложение является консольным приложением Windows. На стороне Azure оно зарегистрировано как собственное приложение. В качестве тестового приложения это однопоточное приложение. Никакого параллелизма, участвуют условия гонки. Логика кода так же проста, как

  • Пользователь входит в систему.
  • Программа выполняет вызов Graph API (показан на примере 1), чтобы получить профиль пользователя, и время ожидания этого вызова API истекает.
например, 1.

Код: Выделить всё

var currentUser = graphClient.Me.Request().GetAsync().Result;
например, 2.

Код: Выделить всё

var site = _graphClient.Sites[SharePointSiteId].Request().GetAsync().Result;
Симптом: через минуту или две выдается исключение AggregationException (из-за TPL), которое включает исключение TimeOutException.

Нет несанкционированного исключения.

Я хочу знать, что может быть возможной причиной и как этого избежать.



ОБНОВЛЕНИЕ:
Вот снимок экрана, когда возникает исключение.
Изображение




ОБНОВЛЕНИЕ 2:
Я попробовал заменить все вызовы API на использование «await» напрямую для ожидания результатов. потому что этот пример кода представляет собой консольное приложение. Я ставлю

Код: Выделить всё

static void Main(string[] args)
{
// using Stephen Cleary's nuget package: Nito.AsyncEx.Tasks
MainImp().WaitAndUnwrapException();
}

static async Task MainImp()
{
// ...
// Graph API calls
Это исключение по-прежнему генерируется из этого простого вызова API:

Код: Выделить всё

var currentUser = await graphClient.Me.Request().GetAsync();
В mscorlib.dll произошло необработанное исключение типа «Microsoft.Graph.ServiceException».
Дополнительная информация: Код: таймаут

Вот полный стек вызовов


в Microsoft.Graph.HttpProvider.d__19.MoveNext()
--- Конец трассировки стека из предыдущего места, где было создано исключение --- at
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
Task) at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
Task) at Microsoft.Graph.HttpProvider.d__18.MoveNext()
--- Конец трассировки стека из предыдущего места, где было создано исключение --- at
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
Task) at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
Task) at
Microsoft.Graph.BaseRequest.d__35.MoveNext()
--- Конец трассировки стека из предыдущего места, где было создано исключение --- at
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
задача) в
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
задача) в Microsoft.Graph.BaseRequest.d__31

Код: Выделить всё

1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---    at
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task)    at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
task)    at Microsoft.Graph.UserRequest.d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---    at
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task)    at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
task)    at System.Runtime.CompilerServices.TaskAwaiter
1.GetResult()
в SharePointConsoleApp.Program.d__14.MoveNext() в
D:\TestProjects\SharePointConsoleApp\Program.cs:line 133
--- Конец трассировки стека из предыдущего места, где было создано исключение --- в
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
задача) в
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
задача) в
Nito.AsyncEx.Synchronous.TaskExtensions.WaitAndUnwrapException(Task
задача) в SharePointConsoleApp.Program.Main(String[] args) в
D:\TestProjects\SharePointConsoleApp\Program.cs:line 50 в
System.AppDomain._nExecuteAssembly(RuntimeAssembly сборки, String[]
args) в System.AppDomain.ExecuteAssembly(String AssemblyFile,
Evidence AssemblySecurity, String[] args) в
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()

в System.Threading.ThreadHelper.ThreadStart_Context(Object) состояние)

at System.Threading.ExecutionContext.RunInternal(ExecutionContext
ExecutionContext, обратный вызов ContextCallback, состояние объекта, логическое значение
saveSyncCtx) at
System.Threading.ExecutionContext.Run(ExecutionContext
ExecutionContext, обратный вызов ContextCallback, состояние объекта, логическое значение
saveSyncCtx) в
System.Threading.ExecutionContext.Run(ExecutionContext
ExecutionContext, обратный вызов ContextCallback, состояние объекта) в
System.Threading.ThreadHelper.ThreadStart()


Подробнее здесь: https://stackoverflow.com/questions/564 ... -exception
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»