SyncStateNotFound 错误:如何修复或避免?

zam*_*4ik 3 microsoft-graph-api

我使用 Microsoft Graph API 增量查询定期下载一些信息(消息、联系人、事件)。但有时我会收到此错误:

{
    "error" :
    {
        "code" : "SyncStateNotFound",
        "innerError" :
        {
            "date" : "2018-06-01T06:31:24",
            "request-id" : "47e918a9-ce5b-42b4-8a86-12b96c93121a"
        },
        "message" : "The sync state generation is not found; generation=605;[highest=841][841][839][840]."
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法为您提供重现步骤,因为我不知道如何重现它。生产环境有时会出现这种情况。

所以我有一些问题:

  1. Microsoft Graph API 中的生成是什么?有相关的可用文档吗?我在互联网上没有找到任何有用的东西。
  2. 为什么 Delta 链接会过期?Delta 链接会随着时间或使用 Delta 链接的某些迭代而过期吗?我可以将我的增量链接保存在我的数据库中,并在例如 1 年内使用此增量链接再次同步吗?
  3. 如何避免增量链接过期?有什么生活妙招吗?
  4. 如果我遇到这个问题我该怎么办?完全重新同步并获得新的增量链接?
  5. 这是错误还是功能?

小智 5

每次同步时,都会生成一个新的同步令牌。我们将当前的同步令牌与前两个同步令牌一起存储。这有助于我们在服务器端推进同步,但在将数据传输到客户端时发生某些情况,因此他们无法获得新的令牌值。在这种情况下,我们可以“回退”到以前的同步令牌,以便客​​户端不必重新同步所有内容。但这三个存储的令牌会随着每次同步而变化 - 最旧的令牌会被丢弃,我们会前进。在您的例子中,您向我们传递了一个大约有 230 代历史的 Delta 代币。那个令牌早已消失了。

另一件需要考虑的事情是,“不活动”的同步令牌将保留大约 90 天,此时我们认为它已经过时,向其倒入气体并将其点燃(不是真的)。