0

我已经浪费了一个月的时间被 MPN 支持从一个支柱追到另一个帖子。我们正忙于开发一项服务,以便使用我们的 SaaS 平台的客户将用户个人资料图像从 Microsoft Graph 同步到我们的系统。客户端列表包括 200 个客户端和大约 4'000'000 个 Microsoft 用户受此影响。

每天从 Microsoft Graph 进行完全同步对我们来说是自杀,这将是对 Microsoft Graph 基础架构的谋杀,因为我们在全球范围内为所有客户运行这些同步。为了避免我们不得不重击 Graph 服务,我们选择为每个客户端运行一次完全同步,存储 delta 令牌,然后从那时起,我们仅每 30 分钟同步一次来自 delta 的更新。

在开发过程中,我们针对我们的一个测试租户进行了测试,一切顺利。完全同步完成,从那时起,如果用户更新了他们的个人资料图像,我们将看到增量结果。然后我们开始对我们的主租户和一些客户租户进行测试,很快发现增量查询没有返回一些租户的更新结果。这使整个项目计划陷入停顿,因此我们无法同步配置文件图像,迫使我们继续使用实时查询过度查询 Graph 的当前计划。

我已经在 25 个租户中尝试过,其中 5 个失败了。

var usersDeltaLink = SQLService.GetDeltaToken(syncConfig);

List<string> memberIds = new List<string>();

var usersDeltaRequest = _graphClient
    .Users
    .Delta()
    .Request(usersDeltaLink == null ? new Option[0] : new[]
    {
        new QueryOption("$deltatoken", usersDeltaLink.Token)
    });

var deltaUsers = await usersDeltaRequest.GetAsync();
int totalCount = 0;

List<Task> itemTasks = new List<Task>();
do
{
    totalCount += deltaUsers.Count;
    Log.Information($"Fetched out {deltaUsers.Count} users");
    itemTasks.AddRange(deltaUsers.CurrentPage.Select(x => x.Id).ToList().Select(async memAccId =>
    {
        await UpdateUserPhoto(memAccId);
    }));
}
while (deltaUsers.NextPageRequest != null && (deltaUsers = await deltaUsers.NextPageRequest.GetAsync()).Count > 0);

await Task.WhenAll(itemTasks);

Uri deltaLink = new Uri(deltaUsers.AdditionalData["@odata.deltaLink"].ToString());
var deltaToken = HttpUtility.ParseQueryString(deltaLink.Query).Get("$deltatoken");

我希望 Microsoft Graph Delta 查询能够正常工作,并且租户的失败率不会达到 20%。

4

1 回答 1

0

个人资料图像不支持当时的增量查询。

https://microsoftgraph.uservoice.com/forums/920506-microsoft-graph-feature-requests/suggestions/38542960-delta-and-subscriptions-to-include-photo-and-photo

于 2020-04-27T13:33:40.983 回答