Offline Microsoft Azure - SQLite - Розробка програм на платформі Microsoft

Зараз на ринку є безліч додатків, які не пристосовані для роботи offline, що створює незручності для користувачів. Нещодавно, для розробників на C# став доступний новий Microsoft Azure Mobile Services SQLiteStore SDK 1.0 alpha, який надає API для створення програми, що працюють в умовах відсутності інтернету і бере на себе всі турботи про синхронізацію даних між локальною базою даних та базою даних Azure. Як локальна база даних створюється і використовується SQLite.Отже, у нас є такі популярні способи організації offline сховища:
- Серіалізація в XML, JSON або іншій NoSQL.
- SQLite або інші сторонні бази даних.
- Щоразу оновлюється локальна копія бази повністю.
- Тільки зміни передаються через мережу.
Azure Mobile Services SDK для синхронізації
Функціональність нового Microsoft Azure Mobile Services SQLiteStore SDK 1.0 alpha для синхронізації даних не ідентична Sync Framework або Azure Data Sync. З точки зору клієнтської сторони, поки що є можливість працювати тільки з SQLite, але творці обіцяють, що можливості розвиватимуться та інші клієнтські БД додадуться пізніше. Серверна сторона підтримує такі бази даних: SQL Database, MongoDB та Azure Table Storage. SDK підтримує такі операції:Push (надсилання на сервер),Pull (завантаження з сервера),Purge (очищення локального сховища). Сьогодні ми зупинимося на тому, як створити бекенд для вашої програми, використовуючи Microsoft Azure Mobile Services SQLiteStore SDK 1.0 alpha. Для роботи намзнадобиться:
Наше завдання складатиметься з наступних пунктів:
- Створення мобільного сервісу та мобільної БД у Microsoft Azure;
- Створення проекту програми. Ми будемо робити універсальний додаток у Visual Studio.
- Створення локальної БД програми.
- Реалізація синхронізації даних.
Налаштування Azure Mobile Services
1. Щоб створити Azure Mobile Service для вашого проекту, необхідно відкрити Microsoft Azure Portal і перейти до менюMobile Services –New

2. Коли мобільний сервіс створиться, на головній сторінці сервісу ви зможете знайти інструкції, як використовувати його в додатках для багатьох популярних платформ і фреймфорків, таких як Windows, Windows Phone, IOS, Andro />
3. Ви можете завантажити шаблон проекту хмарного сервісу, доопрацювати його код, наприклад, поправивши модель даних як на скріншоті нижче.

Створюємо проект програми
1. Я буду використовувати проект універсальної програми для Windows та Windows Phone.

2. Після створення проекту підключимо необхідні бібліотеки. Так як у нас проект і для Windows і для Windows Phone, то встановитиWindowsAzure.MobileServices треба для обох проектів.



public static MobileServiceClient MobileService = новий MobileServiceClient("https://demo-backend.azure-mobile.net/", "ZDgibxPOCWSwOvbYJvAAipjAybMIJO51");
4. Тепер ми можемо працювати з даними через хмарний сервіс і зберігати дані в БД.
Створення локальної бази даних та синхронізація
Тепер нам потрібно створити локальне сховище даних SQLite.
2. Додамо SQLite як бібліотеку для наших додатків Windows і Windows Phone.


3. Встановимо та додамо доReferences пакетWindowsAzure.MobileServices.SQLiteStore

4. Відкриємо проектShared і створимо там новий порожній клас з моделлю даних. У моєму випадку він вийшов ось такий:

5. Створимо допоміжний клас, який створюватиме нам локальну базу даних, вміти наповнювати її даними та відправляти дані в хмарний сервіс.
public static class MobileServicesSync
public static async void InitSQLiteStore()
var store = new MobileServiceSQLiteStore("DemoAppSync.db");
await App.MobileService.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());
public static async void InsertItem(MyAppItem item)
IMobileServiceSyncTable table = App.MobileService.GetSyncTable();
public static async void Push()
string errorString = null;
CancellationToken = New CancellationToken();
> catch (MobileServicePushFailedException ex)
errorString = "Push failed because of sync errors: " + ex.PushResult.Errors.Count() + ", message: " + ex.Message;
> catch (Exception ex)
errorString = "Push failed:" + ex.Message;
Інтерфейс програми
1. ВідкриємоMainPage.xaml і додамо туди кнопки для заповнення таблиці даними та синхронізації.
2. ДодамоMainPage.xaml.cs код для обробки подій.
private void addBtn_Click(object sender, RoutedEventArgs e)
private void syncBtn_Click(object sender, RoutedEventArgs e)
Запуск та перевірка
1. Запустимо програму і подивимося як вона працює.

2. Як тільки ми запустили програму, у нас вже створилася локальна база SQLite. Ми можемо знайти її в папці програми та подивитися. Для цього я використовуватиму SQLiteБраузер.
Моя база даних лежить тут: C:\Users\[username]\AppData\Local\Packages\[app id]\LocalState

Як бачите, зараз вона порожня.
3. Додамо до неї елемент, натиснувши на кнопкуAdd Item нашої програми.
4. Дані в базі оновляться і туди додасться запис, але наша хмарна БД ще порожня.

5. Тепер натисніть кнопкуSync у додатку для синхронізації баз даних і дивимося результат.

Синхронізація відпрацювала і в хмарній базі з'явилися дані з локальної програми.

Примітка: для тих, у кого не вийшло.
Може виявитися, що створення локальної БД впаде з помилкою. Тоді знайдіть і додайте вReferences складанняSQLitePCL.Ext.dll. Сама вона чомусь не завжди встановлюється NuGet'ом.

Висновок
Новий Microsoft Azure Mobile Services та його SDK має багато нових корисних можливостей для розробників додатків. Одна з них – це підтримка offline роботи та синхронізації даних для додатків. Дотримуючись цієї інструкції, ви можете налаштувати синхронізацію даних для вашого Phone або Windows програми не витрачаючи багато часу на складні алгоритми та написання бібліотек.