「同期ハンドラ」を使用しない場合、プッシュアンドプルの同期エラーを捕捉する必要があります。Azure Mobile Servicesの同期競合処理:アドホック対同期ハンドラ
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
をキャッチすると言います。
FINALLY QUESTION(S):
私は上記のすべての可能な例外のタイプをカバーしたいと考えています。
私が同期ハンドラを使用している場合、プッシュ/プル/パージ/などを試してみる必要はありません。オペレーション?私が見たサンプルは、同じプロジェクト内にすべてのもの(アドホック解像度と同期ハンドラ)が含まれているので少し混乱します。
また、サンプルの多くには、競合処理の代替方法として同期ハンドラが含まれています。 (たとえば、https://github.com/lindydonna/xamarin-forms-offline-syncでは、同期ハンドラはプロジェクトで実際には使用されません)。同期ハンドラを使用する場合、例外ブロックで競合解消を行う必要はありませんが、一般的な例外処理が必要です。 –
はい、ありがとうございます。もちろん、一般的な汎用目的のキャッチは常に保証されていますが、紛争解決をどこで行うべきか分かりませんでした。 –
携帯電話でこの問題に直面している人なら、接続に関する@AdrianHallの問題を解決するには、すばらしい[接続ライブラリ](http://github.com/jamesmontemagno/ConnectivityPlugin)を使用できます。私はそれを使用して、最終的な 'catch(Exception ex){}'にバブルアップすると思う、非競合のネットワーク問題を検出します。 –