由于某些奇怪的原因,PullAsync() 方法似乎有一些奇怪的问题。我创建和同步的任何数据都只能由 PullAsync() 从该解决方案中提取。
根据你提供的教程,我发现相关的PullAsync
正在使用增量同步.
await coffeeTable.PullAsync("allCoffees", coffeeTable.CreateQuery());
增量同步:
拉取操作的第一个参数是仅在客户端上使用的查询名称。如果使用非空查询名称,Azure Mobile SDK 会执行增量同步。每次拉取操作返回一组结果时,该结果集中的最新 updateAt 时间戳都会存储在 SDK 本地系统表中。后续拉取操作仅检索该时间戳之后的记录。
这是我的测试,您可以参考它以更好地理解增量同步:
客户 :await todoTable.PullAsync("todoItems-02", todoTable.CreateQuery());
客户端SDK会检查是否有id等于的记录deltaToken|{table-name}|{query-id}
来自__config
SQLite 本地存储的表。
![enter image description here](https://i.stack.imgur.com/Gbr2w.png)
如果没有记录,那么SDK会发送如下请求来拉取您的记录:
https://{your-mobileapp-name}.azurewebsites.net/tables/TodoItem?$filter=(updatedAt%20ge%20datetimeoffset'1970-01-01T00%3A00%3A00.0000000%2B00%3A00')&$orderby=updatedAt&$skip=0&$top=50&__includeDeleted=true
Note: the $filter
将被设置为(updatedAt ge datetimeoffset'1970-01-01T00:00:00.0000000+00:00')
当有记录时,SDK 会拾取该记录value
作为最新的updatedAt时间戳并发送请求,如下所示:
https://{your-mobileapp-name}.azurewebsites.net/tables/TodoItem?$filter=(updatedAt%20ge%20datetimeoffset'2017-06-26T02%3A44%3A25.3940000%2B00%3A00')&$orderby=updatedAt&$skip=0&$top=50&__includeDeleted=true
根据我的理解,如果您在不同的移动客户端中使用相同的查询ID(非空)处理相同的逻辑查询,则需要确保本地数据库是由每个客户端新创建的。另外,如果您想选择退出增量同步,请传递null
作为查询 ID。在这种情况下,每次调用时都会检索所有记录PullAsync
,这可能是低效的。想要了解更多详情,您可以参考离线同步的工作原理.
此外,您可以利用fiddler用于在调用时捕获网络跟踪PullAsync
,以便解决您的问题。