2016-07-15 12 views
2

「同期ハンドラ」を使用しない場合、プッシュアンドプルの同期エラーを捕捉する必要があります。Azure Mobile Servicesの同期競合処理:アドホック対同期ハンドラ

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()で処理されます。サンプルは MobileServiceConflictExceptionMobileServicePreconditionFailedExceptionおよびExceptionをキャッチすると言います。

FINALLY QUESTION(S):

私は上記のすべての可能な例外のタイプをカバーしたいと考えています。

私が同期ハンドラを使用している場合、プッシュ/プル/パージ/などを試してみる必要はありません。オペレーション?私が見たサンプルは、同じプロジェクト内にすべてのもの(アドホック解像度と同期ハンドラ)が含まれているので少し混乱します。

答えて

2

プッシュ/プル/などを配置する必要があります。 try/catchブロック内の操作。あなたが考えなかった例外(例えば、ネットワークが消滅することを含む)が起こるというリスクは常に存在します。

+2

また、サンプルの多くには、競合処理の代替方法として同期ハンドラが含まれています。 (たとえば、https://github.com/lindydonna/xamarin-forms-offline-syncでは、同期ハンドラはプロジェクトで実際には使用されません)。同期ハンドラを使用する場合、例外ブロックで競合解消を行う必要はありませんが、一般的な例外処理が必要です。 –

+0

はい、ありがとうございます。もちろん、一般的な汎用目的のキャッチは常に保証されていますが、紛争解決をどこで行うべきか分かりませんでした。 –

+0

携帯電話でこの問題に直面している人なら、接続に関する@AdrianHallの問題を解決するには、すばらしい[接続ライブラリ](http://github.com/jamesmontemagno/ConnectivityPlugin)を使用できます。私はそれを使用して、最終的な 'catch(Exception ex){}'にバブルアップすると思う、非競合のネットワーク問題を検出します。 –

関連する問題