Мы работаем на .NET Core 2.1 и иногда получаем исключение "Безопасная двоичная сериализация не поддерживается на этой платформе" при выполнении следующего запроса:
await _adClient.Users[userId].AppRoleAssignments.ExecuteAsync();
Повторное выполнение запроса часто срабатывает, поэтому выполняется какое-то условие, при котором двоичная сериализация не выполняется (или завершается успешно?) При последующих запросах? Тем не менее, если я перезапущу службу, она часто будет работать и по первому запросу.
Мы используем старый клиент AD Graph, потому что 1) клиент Microsoft Graph еще не полностью поддерживает AppRoleAssignments
и 2) то, что поддерживается, является частью бета-версии и не рекомендуется для производственного использования.
Полный стек вызовов ниже:
System.Data.Services.Client.BaseAsyncResult.EndExecute<T>(object source, string method, IAsyncResult asyncResult)
System.Data.Services.Client.QueryResult.EndExecuteQuery<TElement>(object source, string method, IAsyncResult asyncResult)
System.Data.Services.Client.DataServiceRequest.EndExecute<TElement>(object source, DataServiceContext context, string method, IAsyncResult asyncResult)
System.Data.Services.Client.DataServiceQuery<TElement>.EndExecute(IAsyncResult asyncResult)
Microsoft.Azure.ActiveDirectory.GraphClient.Extensions.DataServiceContextWrapper+<>c__DisplayClass4c<TSource, TInterface>.<ExecuteAsync>b__4a(IAsyncResult r)
System.Threading.Tasks.TaskFactory<TResult>.FromAsyncCoreLogic(IAsyncResult iar, Func<IAsyncResult, TResult> endFunction, Action<IAsyncResult> endAction, Task<TResult> promise, bool requiresSynchronization)
Microsoft.Azure.ActiveDirectory.GraphClient.Extensions.DataServiceContextWrapper.ExecuteAsync<TSource, TInterface>(DataServiceQuery<TSource> inner)
Microsoft.Azure.ActiveDirectory.GraphClient.AppRoleAssignmentCollection.<ExecuteAsync>b__2()
Merck.SeaMonkey.Api.AzureADApi.Controllers.UserController.GetApplicationRoleAssignments(string userId) in UserController.cs
Новый клиент Microsoft Graph здесь не вариант, хотя я полагаю, мы можем перейти к базовому интерфейсу REST, который представляет собой небольшую работу со всей логикой повторных попыток, анализом результатов и т. Д., Которые мы полагались на клиент графа. делать.
ОБНОВЛЕНИЕ: укажите источник исключения, мы предполагаем, что есть проблема с сериализацией объекта в ответе OData. Однако, используя AD Graph Explorer, мы видим очень простой ответ пустого массива значений вместе со ссылкой на документ метаданных для объекта. Мы часто заставляли проблему повторяться, удаляя и добавляя новые назначения ролей приложения, но мы не можем заставить ее возникать на 100% надежно. Похоже, что какое-то состояние повреждено, возможно, в каком-то внутреннем кеше?