2016-12-14 18 views
0

私はawait client.SyncContext.PushAsync();を呼び出して、新しい作成/更新されたオブジェクトをサーバーにプッシュします。しかし、毎回__operationsテーブルの順序が守られているわけではありません。Azure-mobile-apps-net-client PushAsyncの間違った注文

例私のアプリでは、典型的な__operationsテーブル用(簡体字):私は、サーバー出力を見るとしかし

1) Create some record in Project table 
2) Update some record in User table 
3) Create another record in Project table 

、それは1)と3)が掲載され、その後、2)パッチが適用されていることを私に伝えます。

__operationsはクライアントで作成されたものと同じ順序で正確に再生されますか?

いくつかの追加情報:

は、私が直接PushAsync()しかもレコード2)の後にawait itemTable.PullAsync("allItems", itemTable.CreateQuery());を呼び出すには、サーバが受け入れるとテストのためのHTTPエラーで応答していないいくつかのデータが含まれています。エラーメッセージはサーバー側に正しく表示されますが、1)と3)の後にPOSTEDが表示されます。

答えて

2

操作テーブルは、サーバーへのトランザクション/ラウンドトリップの回数を最小限に抑えるために縮小されています。あなたのケースでは、何が表示されることである。我々はすでに、レコードAが

を更新されているので、

1)レコードAは、削除)

2)レコードBが

3に更新され、更新されますしたがって、3つではなく2つのレコードが表示されます。レコードAは一度だけ送信されます。

+0

あなたの答えをありがとう。 Sry、私はあなたの説明を理解していないのではないかと心配しています。私の例の数字1)、2)と3)は、ローカルのsqliteデータベースの__operationsテーブルに3つの異なる行があります。 1)は、まだサーバー上にない「Project」タイプの新しく作成されたオブジェクトです。 2)アップデート(クライアント上で更新された)が、以前にサーバからダウンロードされた「ユーザ」オブジェクトになっていますか?3)**異なる**新しく作成された「プロジェクト」です。 1)と3)は異なるIDを持ち、以前は存在しませんでした。 – user2415476

0

1)と3)がPOSTされてから2)が実行されたことがわかります。

PushAsyncを使用すると、変更をモバイルアプリバックエンドにプッシュできます。わかっているように、間違った注文がモバイルアプリAPIによって発生した可能性があります。たとえば、更新ユーザーテーブルが200msを使用し、レコードを作成する場合、100msが使用されます。順序は1)/ 3)→2)となります。レコードの作成に300msを使用する場合は、2) - > 1)/ 3)となります。

+0

ご意見ありがとうございます。いくつかの変更を加えました。要求の順序は、__operationsテーブルの順序と同じになります。 azure-mobile-apps-net-client SDKは、__operationsテーブルと同じ順序で常にトランザクションをサーバーに再生しますか? – user2415476

関連する問題