Разработка для Windows Azure
Макет приложения для работы с Azure
Для нормального построения проекта приложения для Windows Phone, нужно убедиться в том, что включено восстановление пакетов NuGet. Для этого нужно открыть диалоговое окно параметров Visual Studio (Сервис > Параметры), перейти в раздел Диспетчер пакетов > Общие и установить флаг Разрешить NuGet загружать недостающие пакеты при построении, рис. 39.6.
После этого проект будет успешно построен. Он реализует следующую функциональность. На первой странице имеется поле, в которое можно ввести текст, представляющий собой заметку или запись списка дел (To do item). По нажатию на кнопку Save (Сохранить), которая расположена рядом с полем запись сохраняется в базе данных, в таблице, которая была создана при создании мобильной службы. Тут же эта запись отображается в списке записей. Для обновления списка записей служит кнопка Refresh (Обновить). Рядом с каждой записью есть флаг. Его установка говорит системе о том, что задача, соответствующая записи, выполнена, об этом делается соответствующая отметка в базе данных, после чего запись перестаёт отображаться в списке. На рис. 39.7. приведена структура проекта после открытия его в Visual Studio. Обратите внимание на папку References – она приобретает такой вид после того, как менеджер пакетов NuGet выполнит автоматическую загрузку пакетов, необходимых для запуска приложения. В частности, здесь мы видим пакеты Microsoft.Windows.Azure, System.Net.Http, Newtonsoft.Json.
Рассмотрим ключевые компоненты этого проекта.
В манифесте приложения (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()Листинг 39.1. Фрагмент файла App.xaml.cs
При создании объекта 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). В нашем случае аутентификация пользователя не применяется, для целей практического использования подобного приложения различными пользователями нужно организовать их аутентификацию.