SyncTables
のAzureアプリケーションサービスを設定しました。私の開発マシンでは、アイテムを保存することができ、クラウドに同期しても問題はありません。しかし、私は新しいデバイスにデータを取得するのに苦労しています。最初に新しいデバイスにアプリケーションをロードするときに、table.PullAsync()
が呼び出すと、各テーブルのすべてのデータがフェッチされると仮定しました。新しいデバイスでAzure同期テーブルを取得します
プッシュ/プルプロセスは正常に完了しましたが、データはデバイスにプルされません。私は新しいデバイスに新しいアイテムを追加することができ、それはクラウドにアップロードされますが、私は新しいデバイスに初期データを取得する運がないと思います。私は、アプリケーションが新しいデバイスにインストールされている場合に作成された新しいデータを新しいデバイスに同期しますが、私は、データの初期プルを行うことができるようにする必要があり、言ったように
private IMobileServiceSyncTable<Person> personTable = App.MobileService.GetSyncTable<Person>();
private IMobileServiceSyncTable<Card> cardTable = App.MobileService.GetSyncTable<Card>();
private async Task SyncAsync(bool showMessage)
{
string errorString = null;
try
{
await App.MobileService.SyncContext.PushAsync();
await personTable.PullAsync("person", personTable.CreateQuery());
await cardTable.PullAsync("cards", cardTable.CreateQuery());
}
catch (MobileServicePushFailedException ex)
{
errorString = "Push failed because of sync errors: " +
ex.PushResult.Errors.Count + " errors, message: " + ex.Message;
errorString = ex.PushResult.Errors.Aggregate(errorString, (current, error) => current + ("\r\n" + error.Result));
}
catch (Exception ex)
{
errorString = "Pull failed: " + ex.Message +
"\n\nIf you are still in an offline scenario, " +
"you can try your Pull again when connected with your Mobile Service.";
}
if (errorString != null)
{
// TODO: log some sort of error message
MessageBox.Show(errorString);
}
else
{
if (showMessage)
{
MessageBox.Show("Database synchronization complete.");
}
LastSynced = string.Format("Last Synced: {0}", DateTime.Now.ToString());
}
}
:ここに私のSyncAsync
方法があります。 PullAsync()
呼び出しにすべてのデータをフェッチするように強制する方法がありますか、または何らかの理由でSyncTables
にフェッチするデータがあることを知らせて、次回のSyncAsync
が呼び出されると、データがフェッチされます。
私のInitLocalStoreAsync()
メソッドは、アプリケーションの起動時にローカルデータベースを初期化します。私はまた、localstore.db
ファイルを削除して、ファイルの新鮮なコピーがすべてのデータを取り込みたいと思って再度起動しようとしましたが、そうではありませんでした。私が考えている
private async Task InitLocalStoreAsync()
{
if (!MobileService.SyncContext.IsInitialized)
{
var store = new MobileServiceSQLiteStore("localstore.db");
store.DefineTable<Person>();
store.DefineTable<Card>();
await MobileService.SyncContext.InitializeAsync(store);
}
}
EDIT
ことの一つは、多分、今の私は、任意のデータを追加する前に、必ずソフトウェアのすべてのインスタンスがインストールされていることを確認する必要があることですが、私はこれを考え出した取得したいです将来的にインストールを増やす場合には、削除する必要があります。
EDIT 2
私は手動でリモート・データベースからデータをフェッチし、新しいインストールにインポートしようとしたが、それはアイテムが次の同期後にサーバ上に複製させます。また、動作しませんでした任意のデータを追加する前に、複数のインスタンスをインストールする
EDIT 3
。どちらのインスタンスもリモートサーバーにデータをプッシュできますが、どちらも新しいデータをフェッチする必要はありません。私はそれがどこかの設定のような単純なものだと思っていますが、私が実行している別のAzureアプリケーションサービスではこの問題はありません。