三角洲查询在一些租户上不工作

问题描述 投票:0回答:1

我已经浪费了一个月的时间,已经被MPN支持从柱子追到了柱子上.我们正忙于开发一项服务,为使用我们的SaaS平台的客户将用户配置文件图像从Microsoft Graph同步到我们的系统.客户名单包括200个客户和4'000'000个微软用户约受此影响。

为了绕过我们不得不敲打Graph服务,我们选择在每个客户上运行一次完整的同步,存储delta令牌,然后从那一刻起,我们每30分钟才从delta上同步更新一次。

在开发过程中,我们对我们的一个测试租户进行了测试,一切都很顺利。完整的同步完成,从这一点上看,如果用户更新了他们的个人资料图片,我们就会看到delta的结果.然后我们开始针对我们的主要租户和一些客户租户进行测试,很快就发现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");

我希望微软Graph Delta查询能够正常工作,而不是在租户上有20%的失败率。

microsoft-graph microsoft-graph-delta
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.