Azure移动服务中的同步冲突处理:ad hoc与同步处理程序
问题描述:
当不使用“同步处理程序”时,需要捕获推和拉的同步错误。Azure移动服务中的同步冲突处理:ad hoc与同步处理程序
PUSH:
样品说赶上MobileServiceInvalidOperationException
,MobileServicePushFailedException
和Exception
:
try {
await client.SyncContext.PushAsync();
}
catch (MobileServiceInvalidOperationException ex) {
// ...push failed
// ...do manual conflict resolution
}
catch (MobileServicePushFailedException ex) {
// ...push failed
// ...do manual conflict resolution
}
catch (Exception ex) {
// ...some other failure
}
PULL:
样品说赶上MobileServiceInvalidOperationException
和Exception
:
try {
await syncTable.PullAsync("allitems", syncTable.CreateQuery());
}
catch (MobileServiceInvalidOperationException ex) {
// ...pull failed
}
catch (Exception ex) {
// ...some other failure
}
SYNC HANDLER:
在.ExecuteTableOperationAsync()
中处理错误。样品说要赶上 MobileServiceConflictException
,MobileServicePreconditionFailedException
和Exception
。
终于QUESTION(S):
我希望我上面覆盖所有可能的异常类型。
如果我使用同步处理程序,这是否意味着我不需要尝试赶上push/pull/purge /等。操作?我看过的示例有点令人困惑,因为它们包含了同一项目中的所有内容(即时分辨率和同步处理程序)...
答
您应该始终将推/拉/ etc。 try/catch块中的操作。总会有这样的风险,即你会没有想到的例外(例如网络消失)就会发生。
此外,许多样本还包括一个同步处理程序作为冲突处理的替代方法。 (例如,在https://github.com/lindydonna/xamarin-forms-offline-sync中,同步处理程序实际上并未在项目中使用)。如果使用同步处理程序,则不需要在异常块中执行冲突解决方案,但是您需要一般的异常处理。 –
是的,谢谢你们,当然,一般的多用途渔获总是有保证的,但我不知道在哪里做解决冲突。 –
对于任何在移动设备上面临此问题的人,为了解决@AdrianHall关于连接问题提到的问题,您可以使用酷[连接库](http://github.com/jamesmontemagno/ConnectivityPlugin)。我使用它来检测无冲突的NETWORK问题,我相信它会向最后的catch(Exception ex){}'冒泡(down?)。 –