Azure移动服务脱机同步

时间:2017-05-28 15:24:14

标签: xamarin.ios azure-mobile-services

我正在尝试从Xamarin.iOS应用程序进行一些离线同步。当我在IMobileServiceSyncTable上调用PullAsync时,调用永远不会返回。

我尝试过使用常规的IMobileServiceTable,这似乎工作正常。似乎这里的同步表对我不起作用

不起作用的代码:

var client = new MobileServiceClient(ApiUrl);

var store = new MobileServiceSQLiteStore("syncstore.db");
store.DefineTable<Entity>();

await client.SyncContext.InitializeAsync(store);
table = client.GetSyncTable<Entity>();
try
{
    await table.PullAsync("all", table.CreateQuery());
}
catch (Exception e)
{
    Debug.WriteLine(e.StackTrace);
}

return await table.ToListAsync();

有效的代码:

var client = new MobileServiceClient(configuration.BaseApiUrl);
return await table.ToListAsync();

有人能说出一些看似错误的东西吗?我没有任何例外或任何指向任何方向的东西 - 它永远不会完成。

更新1: 看到一些其他SO问题,其中人们有类似的问题,因为他们的调用堆栈中的某个地方没有等待,而是做了Task.Result或Task.Wait()。但是,我在整个链条中等待这个电话。这是例如我编写的单元测试具有与上述完全相同的行为。挂起,永不回归。

[Fact]
public async Task GetAllAsync_ReturnsData()
{
    var result = await sut.GetAllAsync();
    Assert.NotNull(result);
}

更新2: 我一直在嗅探单元测试发出的请求。似乎它会挂起,因为它会持续多次执行http请求,并且永远不会退出该操作。

1 个答案:

答案 0 :(得分:0)

最后!我发现了这个问题。

问题是服务器在GetAll操作中返回了IEnumerable。相反,它应该是一个IQueryable

这个问题的答案向我指出了正确的方向

IMobileServiceClient.PullAsync deadlock when trying to sync with Azure Mobile Services