增量查询不适用于某些租户

Delta Queries not working on some tenants

我已经浪费了一个月的时间,已经被 MPN 支持人员从支柱追赶到 post。 我们正忙于开发一项服务,为使用我们的 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%。

原来个人资料图片当时不支持增量查询。

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