Мы работаем на .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, который представляет собой небольшую работу со всей логикой повторных попыток, анализом результатов и т. Д., На которые мы полагались графический клиент, чтобы сделать.
UPDATE:
Укажите источник исключения, мы предполагаем, что существует проблема в сериализации объекта в ответе OData. Однако, используя AD Graph Explorer, мы видим очень простой ответ пустого массива значений вместе со ссылкой на документ метаданных для сущности. Мы часто повторяли проблему, удаляя и добавляя новые назначения ролей приложения, но мы не можем заставить ее возникать на 100% надежно. Похоже, что какое-то состояние повреждено, возможно, в каком-то внутреннем кеше?