- PVSM.RU - https://www.pvsm.ru -

Сейчас на рынке есть огромное количество приложений, которые не приспособлены для работы offline, что создает неудобства для пользователей.
Некоторое время назад, для разработчиков на C# стал доступен новый Microsoft Azure Mobile Services SQLiteStore SDK 1.0 alpha [1], который предоставляет API для создания приложения, работающих в условиях отсутствия интернета и берущий на себя все заботы о синхронизации данных между локальной базой данных и базой данных Azure. В качестве локальной базы данных создается и используется SQLite.
Итак, у нас есть следующие популярные способы организации offline хранилища:
Механизмы синхронизации:
Средства синхронизации:
Функциональность нового Microsoft Azure Mobile Services SQLiteStore SDK 1.0 alpha [1] для синхронизации данных не идентична Sync Framework или Azure Data Sync.
С точки зрения клиентской стороны, пока есть возможность работать только с SQLite [2], но создатели обещают, что возможности будут развиваться и другие клиентские БД добавятся позже.
Серверная сторона поддерживает следующие базы данных: SQL Database, MongoDB и Azure Table Storage.
SDK [1] поддерживает следующие операции: Push (отправка на сервер), Pull (загрузка с сервера), Purge (очистка локального хранилища).
Сегодня мы остановимся на том, как создать бэкенд для вашего приложения используя Microsoft Azure Mobile Services SQLiteStore SDK 1.0 alpha [1].
Для работы нам понадобится:
Наша задача будет состоять из следующих пунктов:
Давайте приступим…
1. Чтобы создать Azure Mobile Service для вашего проекта, необходимо открыть Microsoft Azure Portal [8] и перейти в меню Mobile Services – New

Создавая облачный сервис, вы можете выбрать на каком языке вы будете писать код сервиса. На С# или JavaScript.

2. Когда мобильный сервис создастся, на главной странице сервиса, вы сможете найти инструкции, как использовать его в приложениях для многих популярных платформ и фреймфорков, таких как Windows, Windows Phone, IOS, Android, Xamarin.

3. Вы можете скачать шаблон проекта облачного сервиса, доработать его код, например, поправив модель данных как на скриншоте ниже.

4. Затем, опубликовать в облаке из Visual Studio.

Как разработать и опубликовать облачный сервис достаточно подробно написано тут [9].
1. Я буду использовать проект универсального приложения для Windows и Windows Phone.

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



3. В общем проекте (Shared), открываем App.xaml.cs и добавляем туда объявление мобильного сервиса:
public static MobileServiceClient MobileService = new MobileServiceClient("https://demo-backend.azure-mobile.net/", "ZDgibxPOCWSwOvbYJvAAipjAybMIJO51");
4. Теперь мы можем работать с данными через облачный сервис и сохранять данныe в БД.
Теперь нам надо создать локальное хранилище данных SQLite.
1. Установим SQLite для Windows 8.1 [10] и SQLite для Windows Phone 8.1 [11]
2. Добавим SQLite в качестве используемой библиотеки для наших приложений Windows и Windows Phone.

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

4. Откроем Shared проект и создадим там новый пустой класс с моделью данных. В моем случае, он получился вот такой:

5. Создадим вспомогательный класс, который будет создавать нам локальную базу данных, уметь наполнять её данными и отправлять данные в облачный сервис.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.WindowsAzure.MobileServices.Sync;
using Microsoft.WindowsAzure.MobileServices.SQLiteStore;
using System.Threading;
namespace DemoApp
{
public static class MobileServicesSync
{
public static async void InitSQLiteStore()
{
if (!App.MobileService.SyncContext.IsInitialized)
{
var store = new MobileServiceSQLiteStore("DemoAppSync.db");
store.DefineTable<MyAppItem>();
await App.MobileService.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());
}
}
public static async void InsertItem(MyAppItem item)
{
IMobileServiceSyncTable<MyAppItem> table = App.MobileService.GetSyncTable<MyAppItem>();
await table.InsertAsync(item);
}
public static async void Push()
{
string errorString = null;
try
{
CancellationToken token = new CancellationToken();
await App.MobileService.SyncContext.PushAsync(token);
}
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 и добавим туда кнопки для заполнения таблицы данными и синхронизации.
<Page
x:Class="DemoApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:DemoApp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
<Button Name="addBtn" Content="Add item" Click="addBtn_Click"></Button>
<Button Name="syncBtn" Content="Sync" Click="syncBtn_Click" ></Button>
</StackPanel>
</Grid>
</Page>
2. Добавим в MainPage.xaml.cs код для обработки событий.
public MainPage()
{
this.InitializeComponent();
MobileServicesSync.InitSQLiteStore();
}
private void addBtn_Click(object sender, RoutedEventArgs e)
{
MobileServicesSync.InsertItem(new MyAppItem { Text="Ура!" });
}
private void syncBtn_Click(object sender, RoutedEventArgs e)
{
MobileServicesSync.Push();
}
1. Запустим приложение и посмотрим как оно работает.

2. Как только мы запустили приложение, у нас уже создалась локальная база SQLite. Мы можем найти её в папке приложения и посмотреть. Для этого я буду использовать SQLite Browser [12].
Моя БД лежит тут: C:Users[username]AppDataLocalPackages[app id]LocalState

Как видите, сейчас она пустая.
3. Добавим в неё элемент, нажав на кнопку Add Item нашего приложения.
4. Данные в базе обновятся и туда добавится запись, но наша облачная БД всё еще пуста.

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

Синхронизация отработала и в облачной базе появились данные из локальной базы приложения.

Новый Microsoft Azure Mobile Services и его SDK [1] имеет много новых полезных возможностей для разработчиков приложений. Одна из них – это поддержка offline работы и синхронизации данных для приложений. Следуя этой инструкции, вы можете настроить синхронизацию данных для вашего Phone или Windows приложения не тратя много времени на сложные алгоритмы и написание библиотек.
Автор: MissUFO
Источник [26]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/windows-phone/64688
Ссылки в тексте:
[1] Microsoft Azure Mobile Services SQLiteStore SDK 1.0 alpha: http://www.nuget.org/packages/WindowsAzure.MobileServices.SQLiteStore/1.0.0-alpha
[2] SQLite: http://www.sqlite.org/
[3] Sync Framework Toolkit: http://code.msdn.microsoft.com/wpapps/Sync-Framework-Toolkit-4dc10f0e
[4] Azure SQL Data Sync: http://msdn.microsoft.com/en-us/library/hh456371.aspx
[5] Подписка Azure: http://azure.microsoft.com/
[6] Windows 8.1: http://windows.microsoft.com/en-us/windows/buy
[7] Visual Studio 2013 Update 2: http://www.microsoft.com/en-us/download/details.aspx?id=42666
[8] Microsoft Azure Portal: http://manage.windowsazure.com/
[9] тут: http://azure.microsoft.com/en-us/documentation/articles/mobile-services-windows-store-get-started/
[10] SQLite для Windows 8.1: http://visualstudiogallery.msdn.microsoft.com/1d04f82f-2fe9-4727-a2f9-a2db127ddc9a
[11] SQLite для Windows Phone 8.1: http://visualstudiogallery.msdn.microsoft.com/5d97faf6-39e3-4048-a0bc-adde2af75d1b
[12] SQLite Browser: http://sqlitebrowser.org/
[13] Blog: Deep dive on the offline support in the Azure Mobile Service managed client SDK: http://blogs.msdn.com/b/carlosfigueira/archive/2014/04/07/deep-dive-on-the-offline-support-in-the-azure-mobile-service-managed-client-sdk.aspx
[14] Tutorial: Get started with offline data: http://azure.microsoft.com/en-us/documentation/articles/Mobile-services-windows-store-dotnet-get-started-offline-data/
[15] Tutorial: Handle conflicts with offline data in Mobile Services: http://azure.microsoft.com/en-us/documentation/articles/Mobile-services-windows-store-dotnet-handling-conflicts-offline-data/
[16] Попробовать Azure: http://aka.ms/azure_trial_free_rus
[17] Загрузить: http://aka.ms/getvsrus
[18] виртуальной академии Microsoft: http://aka.ms/gomvarus
[19] Разработка приложений на платформе Microsoft: http://www.microsoftvirtualacademy.com/training-courses/app-development-on-microsoft-platform-rus
[20] Кросс-платформенная разработка приложений для Windows Phone и Windows 8: http://www.microsoftvirtualacademy.com/training-courses/cross-platforming-dev-for-windows-phone-windows-8-rus
[21] Разработка приложений с общим кодом для платформ Windows 8 и Windows Phone: http://www.microsoftvirtualacademy.com/training-courses/build-for-windows-8-windows-phone
[22] Сложные приёмы разработки приложений для Windows Phone 8: http://www.microsoftvirtualacademy.com/training-courses/windows-phone-8-for-begginers
[23] Расширенные возможности разработки для Windows Phone 8: http://www.microsoftvirtualacademy.com/training-courses/advanced-possibilities-appdev-windows-phone-8-rus
[24] курсы по разработке в облаке Azure: http://www.microsoftvirtualacademy.com/product-training/product-windows-azure-ru
[25] Стать разработчиком: http://aka.ms/wpstartrus
[26] Источник: http://habrahabr.ru/post/229041/
Нажмите здесь для печати.