Я пытаюсь воспроизвести сообщение «Начало работы с легкими таблицами Azure Mobile Apps» от James Montemagno. Однако я хотел бы внести некоторые изменения и/или дополнения, чтобы результат соответствовал моим личным интересам. Все работает отлично, за исключением одного вопроса:Xamarin Forms и Azure Mobile Apps: CancelledBySyncStoreError Исключение из PullAsync
PullAsync (от IMobileServiceSyncTable) бросает CancelledBySyncStoreError исключение !!!
(Я выполнив Xamarin Forms приложение как Android App - цель decice является Nexus 7 с Android версии 5.1.1)
Детали следующим образом:
В Azure Portal I» ve setup Easy Table. Схема выглядит следующим образом:
Azure Schema Definition of Easy Table
таблица на Портале, кажется, правильно установлена, потому что я могу интегрировать удаленную таблицу в Visual Studio (2013) Server Explorer. Детали схемы, как видно из Visual Studio следующим образом:
Table Schema as seen by Visual Studio
Или:
CREATE TABLE [dbo].[FirstHighScores] (
[id] NVARCHAR (255) CONSTRAINT [DF_FirstHighScores_id] DEFAULT (CONVERT([nvarchar](255),newid(),(0))) NOT NULL,
[createdAt] DATETIMEOFFSET (3) CONSTRAINT [DF_FirstHighScores_createdAt] DEFAULT (CONVERT([datetimeoffset](3),sysutcdatetime(),(0))) NOT NULL,
[updatedAt] DATETIMEOFFSET (3) NULL,
[version] ROWVERSION NOT NULL,
[deleted] BIT DEFAULT ((0)) NULL,
[Name] NVARCHAR (MAX) NULL,
[Score] FLOAT (53) NULL,
[PlayedAt] DATETIMEOFFSET (3) NULL,
PRIMARY KEY NONCLUSTERED ([id] ASC)
);
Как вы можете видеть, я добавил три колонки на портале вручную: Название, Оценка и PlayedAt. Соответствующие типы данных SQL: String, Номер и Дата. Все остальные записи схемы были созданы автоматически дизайнером схемы Azure Portal.
Next некоторые информация о о моем Xamarin Forms App:
модель класса моего Azure Easy таблицы выглядит следующим образом (Azure имя таблицы и имя # класса C одинаковы (!)):
namespace AzureHighScoresFirstApp
{
public class FirstHighScores
{
[Newtonsoft.Json.JsonProperty("Id")]
public string Id { get; set; }
[Microsoft.WindowsAzure.MobileServices.Version]
public string AzureVersion { get; set; }
public String Name { get; set; }
public DateTime PlayedAt { get; set; }
public float Score { get; set; }
}
}
Инициализация -Method работает без (!) Исключение:
public async Task Initialize()
{
try
{
this.mobileService = new MobileServiceClient("http://peterstestapp.azurewebsites.net");
// setup local sqlite store and intialize our table
const string path = "syncstore.db";
MobileServiceSQLiteStore store = new MobileServiceSQLiteStore(path);
store.DefineTable<FirstHighScores>();
await this.mobileService.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());
// get our sync table that will call out to azure
this.scoresTable = this.mobileService.GetSyncTable<FirstHighScores>();
Debug.WriteLine("Did Initialize");
}
catch(Exception ex)
{
Debug.WriteLine("{0}", ex.Message);
}
}
The SyncScores -метод выглядит следующим образом:
public async Task SyncScores()
{
try
{
IMobileServiceTableQuery<FirstHighScores> query = this.scoresTable.CreateQuery();
await this.scoresTable.PullAsync("allScores", query); <== **crashes**
await this.mobileService.SyncContext.PushAsync(); <== not reached
}
catch (MobileServicePushFailedException ex)
{
string ErrorString = string.Format("Push failed because of sync errors: {0} errors, message: {1}",
ex.PushResult.Errors.Count, ex.Message);
Debug.WriteLine(ErrorString + " - " + ex.PushResult.Status);
}
catch (Exception ex)
{
Debug.WriteLine("Exception SyncScores: " + ex);
}
}
The SyncScores - и Initialize -метод имеют следующие переменные экземпляра:
private MobileServiceClient mobileService;
private IMobileServiceSyncTable<FirstHighScores> scoresTable;
Если я позвоню SyncScores (в пределах Read - или Написать -метод из моего Xamarin Forms Client), MobileServicePushFailedException -Exception с сообщением об ошибке 'CancelledBySyncStoreError' отбрасывается.
На мой взгляд, исключение, так как SQLite-клиент в Xamarin Forms приложения, которые проинструктированы о схеме таблицы через определение моего C# -класса «FirstHighScores» и удаленной схемы табличного соответствующей Azure Easy Table точно не соответствует.
Но я не могу понять разницу ....
К сожалению, некоторые идеи?
Если вы удалите приложение с устройства, база данных будет удалена. –