2016-07-15 25 views
2

当不使用“同步处理程序”时,需要捕获推和拉的同步错误。Azure移动服务中的同步冲突处理:ad hoc与同步处理程序

PUSH:

样品说赶上MobileServiceInvalidOperationExceptionMobileServicePushFailedExceptionException

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:

样品说赶上MobileServiceInvalidOperationExceptionException

try { 
    await syncTable.PullAsync("allitems", syncTable.CreateQuery()); 
} 
catch (MobileServiceInvalidOperationException ex) { 
    // ...pull failed 
} 
catch (Exception ex) { 
    // ...some other failure 
} 

SYNC HANDLER:

.ExecuteTableOperationAsync()中处理错误。样品说要赶上 MobileServiceConflictException,MobileServicePreconditionFailedExceptionException

终于QUESTION(S):

我希望我上面覆盖所有可能的异常类型。

如果我使用同步处理程序,这是否意味着我不需要尝试赶上push/pull/purge /等。操作?我看过的示例有点令人困惑,因为它们包含了同一项目中的所有内容(即时分辨率和同步处理程序)...

回答

2

您应该始终将推/拉/ etc。 try/catch块中的操作。总会有这样的风险,即你会没有想到的例外(例如网络消失)就会发生。

+2

此外,许多样本还包括一个同步处理程序作为冲突处理的替代方法。 (例如,在https://github.com/lindydonna/xamarin-forms-offline-sync中,同步处理程序实际上并未在项目中使用)。如果使用同步处理程序,则不需要在异常块中执行冲突解决方案,但是您需要一般的异常处理。 –

+0

是的,谢谢你们,当然,一般的多用途渔获总是有保证的,但我不知道在哪里做解决冲突。 –

+0

对于任何在移动设备上面临此问题的人,为了解决@AdrianHall关于连接问题提到的问题,您可以使用酷[连接库](http://github.com/jamesmontemagno/ConnectivityPlugin)。我使用它来检测无冲突的NETWORK问题,我相信它会向最后的catch(Exception ex){}'冒泡(down?)。 –