2016-07-15 29 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?)。 –