Цель работы: освоить технологию работы с Windows Azure
Рассмотрим простой пример работы с мобильными службами Windows Azure. Предполагается, что у вас, после предыдущей лекции, уже имеется зарегистрированная учетная запись Microsoft Azure. Если это не так – зарегистрируйтесь в сервисе сейчас (https://account.windowsazure.com).
Мы собираемся создать службу, которую можно использовать для хранения данных приложения для Windows Phone 8. Для этого перейдем на портал управления Windows Azure, в раздел управления мобильными службами. Здесь нужно нажать на ссылку Создать мобильную службу, будет открыто окно Новая мобильная служба, рис. 39.1.
(рис 39.1) Новая мобильная служба
В данном окне нам нужно, задать URL-адрес новой мобильной службы, выбрать базу данных SQL (в нашем случае здесь присутствует вариант, использующийся для создания нового экземпляра базы данных SQL) и выбрать регион, который ближе всего к месту предполагаемого использования приложения, работающего с создаваемой мобильной службой. В настоящий момент доступно четыре региона:
При вводе URL-адреса службы нужно использовать уникальный адрес, в процессе ввода производится проверка уникальности, если вы ввели адрес, который уже кем-то используется, будет выдано соответствующее предупреждение. После заполнения полей нужно нажать на кнопку Далее, расположенную в правой нижней части окна Создать мобильную службу.
Так как мы выбрали вариант создания новой базы данных, следующее окно, рис. 39.2., предложит нам задать имя базы данных, выбрать сервер базы данных. Так как сервера не создаются по умолчанию после регистрации, мы выбираем вариант создания сервера и заполняем поля, указывая имя входа на сервер, пароль входа на сервер и регион сервера, в данном поле по умолчанию выбран тот же регион, который мы указали на первом этапе создания службы.
(рис 39.2) Параметры базы данных
При выборе пароля к серверу баз данных нужно, чтобы этот пароль удовлетворял определенным правилам, их список выводится во всплывающем окне при вводе пароля. В частности, пароль должен быть больше восьми символов и содержать символы, по крайней мере, из трёх категорий, среди которых прописные буквы английского алфавита, строчные буквы, цифры, специальные символы. После заполнения полей нажмем на кнопку Завершить.
В списке мобильных служб появится новая мобильная служба, рис. 39.3., некоторое время займёт её создание, о том, в каком состоянии находится служба, можно судить по полю Состояние.
(рис 39.3) Новая мобильная служба
После создания службы мы можем приступать к созданию приложения для работы с ней. Для этого мы воспользуемся возможностями портала, щёлкнем по имени только что созданной службы, будет открыто окно быстрого запуска службы, которое позволяет подключить её к приложениям, рассчитанным на различные платформы. Здесь доступны следующие платформы: Магазин Windows (то есть – приложение для Windows 8), Windows Phone 8, iOS, Android, HTML/JavaScript. Мы выберем платформу Windows Phone 8, в нижней части окна, рис. 39.4., нам будет предложено либо создать новое приложение для Windows Phone 8, либо подключить к системе существующее приложение.
(рис 39.4) Настройка мобильной службы
Новое шаблонное приложение, которое будет содержать код доступа к мобильным службам Windows Azure – это хорошая отправная точка для создания собственного приложения и знакомства с методами программной работы со службой. Выберем пункт Создание нового приложения для Windows Phone 8. После щелчка по этой ссылке нам предложат, рис. 39.5., во-первых, загрузить инструменты разработчика для Windows Phone 8, во-вторых, автоматически создать таблицу Todoitem (таблицы можно создавать и самостоятельно), и, в-третьих – загрузить так называемый "настраиваемый начальный проект".
(рис 39.5) Создание таблицы в базе данных и загрузка начального проекта
Доступный для загрузки проект – это программный проект для Windows Phone 8, автоматически настроенный для работы с нашей новой мобильной службой, механизмы работы которого можно применить в собственном приложении, либо развив этот проект, либо использовав его в качестве отправной точки для той части существующего приложения, которая будет взаимодействовать с Azure.
При нажатии на кнопку Загрузить будет загружен ZIP-файл, имя которого соответствует названию нашей мобильной службы. Файл нужно распаковать в то место, где вы решите хранить данный проект, открыть его можно в уже установленном Visual Studio 2012 для Windows Phone.
Для нормального построения проекта приложения для Windows Phone, нужно убедиться в том, что включено восстановление пакетов NuGet. Для этого нужно открыть диалоговое окно параметров Visual Studio (Сервис > Параметры), перейти в раздел Диспетчер пакетов > Общие и установить флаг Разрешить NuGet загружать недостающие пакеты при построении, рис. 39.6.
(рис 39.6) Включение загрузки недостающих пакетов при построении
После этого проект будет успешно построен. Он реализует следующую функциональность. На первой странице имеется поле, в которое можно ввести текст, представляющий собой заметку или запись списка дел (To do item). По нажатию на кнопку Save (Сохранить), которая расположена рядом с полем запись сохраняется в базе данных, в таблице, которая была создана при создании мобильной службы. Тут же эта запись отображается в списке записей. Для обновления списка записей служит кнопка Refresh (Обновить). Рядом с каждой записью есть флаг. Его установка говорит системе о том, что задача, соответствующая записи, выполнена, об этом делается соответствующая отметка в базе данных, после чего запись перестаёт отображаться в списке. На рис. 39.7. приведена структура проекта после открытия его в Visual Studio. Обратите внимание на папку References – она приобретает такой вид после того, как менеджер пакетов NuGet выполнит автоматическую загрузку пакетов, необходимых для запуска приложения. В частности, здесь мы видим пакеты Microsoft.Windows.Azure, System.Net.Http, Newtonsoft.Json.
(рис 39.7) Структура шаблонного проекта, работающего с Windows Azure
Рассмотрим ключевые компоненты этого проекта.
В манифесте приложения (WMAppManifest.xml) включены, среди прочих, возможности ID_CAP_NETWORKING, ID_CAP_WEBBROWSERCOMPONENT.
В файле App.xaml.cs (Листинг 39.1), производится создание общедоступного статического поля MobileService типа MobileServiceClient (http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.windowsazure.mobileservices.mobileserviceclient.aspx).
using System;
using System.Diagnostics;
using System.Resources;
using System.Windows;
using System.Windows.Markup;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using my_notes.Resources;
using Microsoft.WindowsAzure.MobileServices;
namespace my_notes
{
public partial class App : Application
{
/// <summary>
/// Provides easy access to the root frame of the Phone Application.
/// </summary>
/// <returns>The root frame of the Phone Application.</returns>
public static PhoneApplicationFrame RootFrame { get; private set; }
public static MobileServiceClient MobileService = new MobileServiceClient(
"https://my-notes.azure-mobile.net/",
"здесь_находится_ключ_приложения_для_доступа_к_службе"
);
/// <summary>
/// Constructor for the Application object.
/// </summary>
public App()
При создании объекта MobileServiceClient в его конструктор передаётся, во-первых, URI мобильной службы (того, который был создан для нас при создании мобильной службы Azure), во-вторых, ключ приложения (Application Key). Существуют и другие варианты этого конструктора, здесь присутствует либо только адрес мобильной службы, либо адрес и ключ приложения. В коде, приведенном в Листинге 39.1 ключ изменен – этот ключ следует хранить в тайне, так как он используется при организации доступа приложения к мобильной службе и не должен попадать в руки третьих лиц.
При создании объекта происходит подключение нашего приложения к мобильной службе. У объекта типа MobileServiceClient имеется ряд свойств и методов. В частности, они позволяют осуществлять аутентификацию пользователя, организовывать выход пользователя из системы, сведения о пользователе, который вошёл в систему, хранятся в свойстве объекта CurrentUser, которое имеет тип Microsoft.WindowsAzure.MobileServices.MobileServiceUser (http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.windowsazure.mobileservices.mobileserviceuser.aspx). В нашем случае аутентификация пользователя не применяется, для целей практического использования подобного приложения различными пользователями нужно организовать их аутентификацию.
Работа с мобильной службой Windows Azure реализована в коде файла MainPage.xaml.cs, его код приведен в Листинге 39.2. Обратите внимание на комментарии к коду, поясняющие его фрагменты.
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using Microsoft.WindowsAzure.MobileServices;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using my_notes.Resources;
namespace my_notes
{
//Объектное представление записи таблицы базы данных
public class TodoItem
{
public int Id { get; set; }
[JsonProperty(PropertyName = "text")]
public string Text { get; set; }
[JsonProperty(PropertyName = "complete")]
public bool Complete { get; set; }
}
public partial class MainPage : PhoneApplicationPage
{
// MobileServiceCollectionView реализует интерфейс ICollectionView
(это удобно для организации привязки к списку) и
// интегрирован с вашей мобильной службой, что упрощает привязку данных к элементу управления ListView
private MobileServiceCollection<TodoItem, TodoItem> items;
//Ссылка на таблицу в базе данных с указанием типа элемента
private IMobileServiceTable<TodoItem> todoTable = App.MobileService.GetTable<TodoItem>();
// Конструктор
public MainPage()
{
InitializeComponent();
}
//Асинхронный метод
private async void InsertTodoItem(TodoItem todoItem)
{
// Этот код выполняет вставку в базу данных нового элемента типа TodoItem.
Когда операция завершается
// и мобильная служба присваивает записи Id, элемент добавляется в CollectionView
await todoTable.InsertAsync(todoItem);
items.Add(todoItem);
}
//Асинхронный метод
private async void RefreshTodoItems()
{
// Этот код обновляет записи в списке, выполняя запрос к таблице TodoItems.
// Благодаря запросу "завершенные" дела не выводятся
try
{
//Получаем из таблицы записи с флагом Complete, установленным в значение false
items = await todoTable
.Where(todoItem => todoItem.Complete == false)
.ToCollectionAsync();
}
catch (MobileServiceInvalidOperationException e)
{
//Сообщение, выводимое при возникновении в ходе загрузки ошибки
MessageBox.Show(e.Message, "Error loading items", MessageBoxButton.OK);
}
ListItems.ItemsSource = items;
}
//Асинхронный метод
private async void UpdateCheckedTodoItem(TodoItem item)
{
// Этот код использует сведения о выполненной задаче TodoItem и обновляет базу данных.
// После ответа MobileService элемент удаляется из списка
await todoTable.UpdateAsync(item);
items.Remove(item);
}
//Обработчик нажатия на кнопку обновления списка
private void ButtonRefresh_Click(object sender, RoutedEventArgs e)
{
RefreshTodoItems();
}
//Обработчик нажатия на кнопку сохранения элемента
private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
var todoItem = new TodoItem { Text = TodoInput.Text };
InsertTodoItem(todoItem);
}
//Обработчик установки флага, говорящего о завершении "дела"
private void CheckBoxComplete_Checked(object sender, RoutedEventArgs e)
{
CheckBox cb = (CheckBox)sender;
TodoItem item = cb.DataContext as TodoItem;
item.Complete = true;
UpdateCheckedTodoItem(item);
}
//Переопределенный метод, выполняющийся при переходе на страницу
protected override void OnNavigatedTo(NavigationEventArgs e)
{
//Обновление списка записей
RefreshTodoItems();
}
}
}
После того, как в App.xaml.cs мы подключились к мобильной службе, операции, которые касаются получения данных из таблицы базы данных, записи в базу, обновления записей, выполняются в привычном для C#-проекта стиле. Обратите внимание на то, что часть операций выполняется асинхронно – об асинхронности мы поговорим в дальнейшем, однако нужно отметить, что использование асинхронных методов обязательно для тех участков кода, где осуществляются операции, на выполнение которых может уйти достаточно много времени. Например, работа с мобильной службой через Интернет – это одна из таких операций. Мы не можем предсказать, как долго будут выполняться запросы к службе, поэтому выполнение подобных запросов в потоке пользовательского интерфейса недопустимо. Это приведет к тому, что интерфейс будет периодически отказываться реагировать на воздействия пользователя.
На странице MainPage.xaml имеется элемент управления LongListSelector с именем ListItems. Данные, соответствующие данным, хранящимся в таблице в мобильной службе, отображаются в этом списке с использованием механизма привязки данных. Для отображения данных используется шаблон (Листинг 39.3), который обеспечивает вывод флага, элемента CheckBox, с именем CheckBoxCompleted и описывает обработчик события, вызываемый при его изменении. Здесь применяется двусторонняя привязка данных. Шаблон обеспечивает и вывод текста с использованием привязки данных.
<phone:LongListSelector Grid.Row="4" Grid.ColumnSpan="2"
Name="ListItems">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Name="CheckBoxComplete" IsChecked="{Binding Complete, Mode=TwoWay}"
Checked="CheckBoxComplete_Checked"
Content="{Binding Text}" Margin="10,5" VerticalAlignment="Center"/>
</StackPanel>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
В этой лабораторной работе мы изучили проект приложения, реализующего работу с мобильными службами Windows Azure в приложениях для Windows Phone 8. Приложение взаимодействует со службой, используя класс MobileServiceClient, который предоставляет удобный интерфейс, скрывающий технические детали такого взаимодействия.
После того, как у вас имеется мобильная служба и вы понимаете работу кода, обеспечивающего взаимодействие приложения с мобильной службой, вы можете приступить к изучению других аспектов работы с Azure. Вы можете воспользоваться для этого ресурсами Центра экспертизы по Windows Azure (http://msdn.microsoft.com/ru-RU/ff380142).
Подумайте над тем, как вы можете использовать мобильные службы Azure в приложении, разработкой которого вы занимаетесь, рассмотрите возможности использования облачной базы данных, работы с Push-уведомлениями, аутентификации пользователей с использованием различных провайдеров аутентификации в применении к вашему приложению и подготовьте отчёт о проделанной работе.
К данной лабораторной работе подготовлено видеоприложение.
Цель работы: освоить технологию работы с Windows Azure
Рассмотрим простой пример работы с мобильными службами Windows Azure. Предполагается, что у вас, после предыдущей лекции, уже имеется зарегистрированная учетная запись Microsoft Azure. Если это не так – зарегистрируйтесь в сервисе сейчас (https://account.windowsazure.com).
Мы собираемся создать службу, которую можно использовать для хранения данных приложения для Windows Phone 8. Для этого перейдем на портал управления Windows Azure, в раздел управления мобильными службами. Здесь нужно нажать на ссылку Создать мобильную службу, будет открыто окно Новая мобильная служба, рис. 39.1.
(рис 39.1) Новая мобильная служба
В данном окне нам нужно, задать URL-адрес новой мобильной службы, выбрать базу данных SQL (в нашем случае здесь присутствует вариант, использующийся для создания нового экземпляра базы данных SQL) и выбрать регион, который ближе всего к месту предполагаемого использования приложения, работающего с создаваемой мобильной службой. В настоящий момент доступно четыре региона:
При вводе URL-адреса службы нужно использовать уникальный адрес, в процессе ввода производится проверка уникальности, если вы ввели адрес, который уже кем-то используется, будет выдано соответствующее предупреждение. После заполнения полей нужно нажать на кнопку Далее, расположенную в правой нижней части окна Создать мобильную службу.
Так как мы выбрали вариант создания новой базы данных, следующее окно, рис. 39.2., предложит нам задать имя базы данных, выбрать сервер базы данных. Так как сервера не создаются по умолчанию после регистрации, мы выбираем вариант создания сервера и заполняем поля, указывая имя входа на сервер, пароль входа на сервер и регион сервера, в данном поле по умолчанию выбран тот же регион, который мы указали на первом этапе создания службы.
(рис 39.2) Параметры базы данных
При выборе пароля к серверу баз данных нужно, чтобы этот пароль удовлетворял определенным правилам, их список выводится во всплывающем окне при вводе пароля. В частности, пароль должен быть больше восьми символов и содержать символы, по крайней мере, из трёх категорий, среди которых прописные буквы английского алфавита, строчные буквы, цифры, специальные символы. После заполнения полей нажмем на кнопку Завершить.
В списке мобильных служб появится новая мобильная служба, рис. 39.3., некоторое время займёт её создание, о том, в каком состоянии находится служба, можно судить по полю Состояние.
(рис 39.3) Новая мобильная служба
После создания службы мы можем приступать к созданию приложения для работы с ней. Для этого мы воспользуемся возможностями портала, щёлкнем по имени только что созданной службы, будет открыто окно быстрого запуска службы, которое позволяет подключить её к приложениям, рассчитанным на различные платформы. Здесь доступны следующие платформы: Магазин Windows (то есть – приложение для Windows 8), Windows Phone 8, iOS, Android, HTML/JavaScript. Мы выберем платформу Windows Phone 8, в нижней части окна, рис. 39.4., нам будет предложено либо создать новое приложение для Windows Phone 8, либо подключить к системе существующее приложение.
(рис 39.4) Настройка мобильной службы
Новое шаблонное приложение, которое будет содержать код доступа к мобильным службам Windows Azure – это хорошая отправная точка для создания собственного приложения и знакомства с методами программной работы со службой. Выберем пункт Создание нового приложения для Windows Phone 8. После щелчка по этой ссылке нам предложат, рис. 39.5., во-первых, загрузить инструменты разработчика для Windows Phone 8, во-вторых, автоматически создать таблицу Todoitem (таблицы можно создавать и самостоятельно), и, в-третьих – загрузить так называемый "настраиваемый начальный проект".
(рис 39.5) Создание таблицы в базе данных и загрузка начального проекта
Доступный для загрузки проект – это программный проект для Windows Phone 8, автоматически настроенный для работы с нашей новой мобильной службой, механизмы работы которого можно применить в собственном приложении, либо развив этот проект, либо использовав его в качестве отправной точки для той части существующего приложения, которая будет взаимодействовать с Azure.
При нажатии на кнопку Загрузить будет загружен ZIP-файл, имя которого соответствует названию нашей мобильной службы. Файл нужно распаковать в то место, где вы решите хранить данный проект, открыть его можно в уже установленном Visual Studio 2012 для Windows Phone.
Для нормального построения проекта приложения для Windows Phone, нужно убедиться в том, что включено восстановление пакетов NuGet. Для этого нужно открыть диалоговое окно параметров Visual Studio (Сервис > Параметры), перейти в раздел Диспетчер пакетов > Общие и установить флаг Разрешить NuGet загружать недостающие пакеты при построении, рис. 39.6.
(рис 39.6) Включение загрузки недостающих пакетов при построении
После этого проект будет успешно построен. Он реализует следующую функциональность. На первой странице имеется поле, в которое можно ввести текст, представляющий собой заметку или запись списка дел (To do item). По нажатию на кнопку Save (Сохранить), которая расположена рядом с полем запись сохраняется в базе данных, в таблице, которая была создана при создании мобильной службы. Тут же эта запись отображается в списке записей. Для обновления списка записей служит кнопка Refresh (Обновить). Рядом с каждой записью есть флаг. Его установка говорит системе о том, что задача, соответствующая записи, выполнена, об этом делается соответствующая отметка в базе данных, после чего запись перестаёт отображаться в списке. На рис. 39.7. приведена структура проекта после открытия его в Visual Studio. Обратите внимание на папку References – она приобретает такой вид после того, как менеджер пакетов NuGet выполнит автоматическую загрузку пакетов, необходимых для запуска приложения. В частности, здесь мы видим пакеты Microsoft.Windows.Azure, System.Net.Http, Newtonsoft.Json.
(рис 39.7) Структура шаблонного проекта, работающего с Windows Azure
Рассмотрим ключевые компоненты этого проекта.
В манифесте приложения (WMAppManifest.xml) включены, среди прочих, возможности ID_CAP_NETWORKING, ID_CAP_WEBBROWSERCOMPONENT.
В файле App.xaml.cs (Листинг 39.1), производится создание общедоступного статического поля MobileService типа MobileServiceClient (http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.windowsazure.mobileservices.mobileserviceclient.aspx).
using System;
using System.Diagnostics;
using System.Resources;
using System.Windows;
using System.Windows.Markup;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using my_notes.Resources;
using Microsoft.WindowsAzure.MobileServices;
namespace my_notes
{
public partial class App : Application
{
/// <summary>
/// Provides easy access to the root frame of the Phone Application.
/// </summary>
/// <returns>The root frame of the Phone Application.</returns>
public static PhoneApplicationFrame RootFrame { get; private set; }
public static MobileServiceClient MobileService = new MobileServiceClient(
"https://my-notes.azure-mobile.net/",
"здесь_находится_ключ_приложения_для_доступа_к_службе"
);
/// <summary>
/// Constructor for the Application object.
/// </summary>
public App()
При создании объекта MobileServiceClient в его конструктор передаётся, во-первых, URI мобильной службы (того, который был создан для нас при создании мобильной службы Azure), во-вторых, ключ приложения (Application Key). Существуют и другие варианты этого конструктора, здесь присутствует либо только адрес мобильной службы, либо адрес и ключ приложения. В коде, приведенном в Листинге 39.1 ключ изменен – этот ключ следует хранить в тайне, так как он используется при организации доступа приложения к мобильной службе и не должен попадать в руки третьих лиц.
При создании объекта происходит подключение нашего приложения к мобильной службе. У объекта типа MobileServiceClient имеется ряд свойств и методов. В частности, они позволяют осуществлять аутентификацию пользователя, организовывать выход пользователя из системы, сведения о пользователе, который вошёл в систему, хранятся в свойстве объекта CurrentUser, которое имеет тип Microsoft.WindowsAzure.MobileServices.MobileServiceUser (http://msdn.microsoft.com/en-us/library/windowsazure/microsoft.windowsazure.mobileservices.mobileserviceuser.aspx). В нашем случае аутентификация пользователя не применяется, для целей практического использования подобного приложения различными пользователями нужно организовать их аутентификацию.
Работа с мобильной службой Windows Azure реализована в коде файла MainPage.xaml.cs, его код приведен в Листинге 39.2. Обратите внимание на комментарии к коду, поясняющие его фрагменты.
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using Microsoft.WindowsAzure.MobileServices;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using my_notes.Resources;
namespace my_notes
{
//Объектное представление записи таблицы базы данных
public class TodoItem
{
public int Id { get; set; }
[JsonProperty(PropertyName = "text")]
public string Text { get; set; }
[JsonProperty(PropertyName = "complete")]
public bool Complete { get; set; }
}
public partial class MainPage : PhoneApplicationPage
{
// MobileServiceCollectionView реализует интерфейс ICollectionView
(это удобно для организации привязки к списку) и
// интегрирован с вашей мобильной службой, что упрощает привязку данных к элементу управления ListView
private MobileServiceCollection<TodoItem, TodoItem> items;
//Ссылка на таблицу в базе данных с указанием типа элемента
private IMobileServiceTable<TodoItem> todoTable = App.MobileService.GetTable<TodoItem>();
// Конструктор
public MainPage()
{
InitializeComponent();
}
//Асинхронный метод
private async void InsertTodoItem(TodoItem todoItem)
{
// Этот код выполняет вставку в базу данных нового элемента типа TodoItem.
Когда операция завершается
// и мобильная служба присваивает записи Id, элемент добавляется в CollectionView
await todoTable.InsertAsync(todoItem);
items.Add(todoItem);
}
//Асинхронный метод
private async void RefreshTodoItems()
{
// Этот код обновляет записи в списке, выполняя запрос к таблице TodoItems.
// Благодаря запросу "завершенные" дела не выводятся
try
{
//Получаем из таблицы записи с флагом Complete, установленным в значение false
items = await todoTable
.Where(todoItem => todoItem.Complete == false)
.ToCollectionAsync();
}
catch (MobileServiceInvalidOperationException e)
{
//Сообщение, выводимое при возникновении в ходе загрузки ошибки
MessageBox.Show(e.Message, "Error loading items", MessageBoxButton.OK);
}
ListItems.ItemsSource = items;
}
//Асинхронный метод
private async void UpdateCheckedTodoItem(TodoItem item)
{
// Этот код использует сведения о выполненной задаче TodoItem и обновляет базу данных.
// После ответа MobileService элемент удаляется из списка
await todoTable.UpdateAsync(item);
items.Remove(item);
}
//Обработчик нажатия на кнопку обновления списка
private void ButtonRefresh_Click(object sender, RoutedEventArgs e)
{
RefreshTodoItems();
}
//Обработчик нажатия на кнопку сохранения элемента
private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
var todoItem = new TodoItem { Text = TodoInput.Text };
InsertTodoItem(todoItem);
}
//Обработчик установки флага, говорящего о завершении "дела"
private void CheckBoxComplete_Checked(object sender, RoutedEventArgs e)
{
CheckBox cb = (CheckBox)sender;
TodoItem item = cb.DataContext as TodoItem;
item.Complete = true;
UpdateCheckedTodoItem(item);
}
//Переопределенный метод, выполняющийся при переходе на страницу
protected override void OnNavigatedTo(NavigationEventArgs e)
{
//Обновление списка записей
RefreshTodoItems();
}
}
}
После того, как в App.xaml.cs мы подключились к мобильной службе, операции, которые касаются получения данных из таблицы базы данных, записи в базу, обновления записей, выполняются в привычном для C#-проекта стиле. Обратите внимание на то, что часть операций выполняется асинхронно – об асинхронности мы поговорим в дальнейшем, однако нужно отметить, что использование асинхронных методов обязательно для тех участков кода, где осуществляются операции, на выполнение которых может уйти достаточно много времени. Например, работа с мобильной службой через Интернет – это одна из таких операций. Мы не можем предсказать, как долго будут выполняться запросы к службе, поэтому выполнение подобных запросов в потоке пользовательского интерфейса недопустимо. Это приведет к тому, что интерфейс будет периодически отказываться реагировать на воздействия пользователя.
На странице MainPage.xaml имеется элемент управления LongListSelector с именем ListItems. Данные, соответствующие данным, хранящимся в таблице в мобильной службе, отображаются в этом списке с использованием механизма привязки данных. Для отображения данных используется шаблон (Листинг 39.3), который обеспечивает вывод флага, элемента CheckBox, с именем CheckBoxCompleted и описывает обработчик события, вызываемый при его изменении. Здесь применяется двусторонняя привязка данных. Шаблон обеспечивает и вывод текста с использованием привязки данных.
<phone:LongListSelector Grid.Row="4" Grid.ColumnSpan="2"
Name="ListItems">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Name="CheckBoxComplete" IsChecked="{Binding Complete, Mode=TwoWay}"
Checked="CheckBoxComplete_Checked"
Content="{Binding Text}" Margin="10,5" VerticalAlignment="Center"/>
</StackPanel>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
В этой лабораторной работе мы изучили проект приложения, реализующего работу с мобильными службами Windows Azure в приложениях для Windows Phone 8. Приложение взаимодействует со службой, используя класс MobileServiceClient, который предоставляет удобный интерфейс, скрывающий технические детали такого взаимодействия.
После того, как у вас имеется мобильная служба и вы понимаете работу кода, обеспечивающего взаимодействие приложения с мобильной службой, вы можете приступить к изучению других аспектов работы с Azure. Вы можете воспользоваться для этого ресурсами Центра экспертизы по Windows Azure (http://msdn.microsoft.com/ru-RU/ff380142).
Подумайте над тем, как вы можете использовать мобильные службы Azure в приложении, разработкой которого вы занимаетесь, рассмотрите возможности использования облачной базы данных, работы с Push-уведомлениями, аутентификации пользователей с использованием различных провайдеров аутентификации в применении к вашему приложению и подготовьте отчёт о проделанной работе.
К данной лабораторной работе подготовлено видеоприложение.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.