Эта статья является Днем № 17 в серии под названием « 31 Дней Манго» и была написана приглашенным автором Майклом Коллиером . С Михаилом можно связаться в Твиттере по адресу @michaelcollier .
Windows Phone + Windows Azure = лучше вместе
Некоторые из наиболее интересных приложений для Windows Phone будут использовать службы определенного типа. Эти сервисы могут быть веб-сервисами для предоставления доступа к бизнес-логике, как и для традиционных приложений ASP.NET. Эти сервисы могут быть сервисами данных для предоставления доступа к нашим данным, как структурным, так и неструктурированным данным. Эти сервисы также могут быть сервисами управления идентификацией, предоставляя способ обработки аутентификации для нашего приложения.
Традиционный путь
Обычно мы подключаем один или несколько серверов, а затем разворачиваем наши сервисы и данные на этих серверах. Это может быть дорогостоящим процессом — во времени и деньгах. Нам нужно время, чтобы построить, настроить и защитить серверы. Нам также необходимо поддерживать эти серверы (сбои оборудования, системные исправления и т. Д.). Прогнозирование количества и размеров серверов, необходимых для поддержки нашего приложения, также является сложной задачей. Купите слишком много, и мы потратили чьи-то деньги. Купите слишком мало, и пользователи (и боссы) будут расстроены. Все это заставляет нас как разработчиков приложений беспокоиться об инфраструктуре, когда все, что мы хотим сделать, это создать мобильное приложение-убийцу.
Современный Путь
В настоящее время одной из преобладающих тенденций является использование сервисов (обратите внимание на «сервисы», а не «серверы»), предоставляемых облачной платформой. Платформа Windows Azure предоставляет вычислительные службы, которые позволяют развертывать приложения наших веб-служб. Мы пишем приложение и разворачиваем его — и даем Windows Azure обрабатывать все остальное. Windows Azure также предлагает доступ к высокодоступным и масштабируемым службам хранения в виде таблиц, больших двоичных объектов и очередей.
- Таблицы представляют собой полуструктурированный механизм хранения, который способен очень эффективно хранить массивные данные (например, NoSQL, а не реляционная база данных).
- По сути, BLOB-объекты действуют как гигантская файловая система для хранения любого содержимого (изображения, фильмы, документы и т. Д.).
- Очереди служат легким механизмом обмена сообщениями для передачи данных между отключенными системами.
Кроме того, Windows Azure предлагает службу управления идентификацией, Access Control Services (ACS), которая предоставляет простой способ аутентификации пользователей через множество поставщиков идентификационных данных. ACS поставляется с предварительно настроенной поддержкой крупных социальных сетей, таких как Facebook, Yahoo !, Windows Live ID и Google. ACS также может подключиться к предприятию для управления идентификацией через службы федерации Active Directory (ADFSv2). ACS особенно хорош для мобильных приложений, так как пользователи, вероятно, уже имеют какой-то социальный профиль. На самом деле, пользователи Windows Phone уже имеют идентификатор Windows Live ID.
Существует множество преимуществ использования платформы, такой как Windows Azure, при создании приложений для Windows Phone. Для начала, это быстро! Вы можете использовать Visual Studio для написания ваших служб Windows Phone и Windows Azure. Как только код написан, услуга может быть доступна в интернете в считанные минуты. Использование Windows Azure также может быть очень дешевым. Вы можете хранить столько данных, сколько хотите, всего за 0,14 доллара США / ГБ в месяц. Поскольку почти вся разработка может осуществляться локально на вашей машине разработки, вам даже не нужно начинать платить, пока вы не запустите свой сервис в облаке. Все это позволяет нам сосредоточиться на создании отличного приложения для Windows Phone и сервисов, которые его освещают, а не на базовой инфраструктуре.
Давай сделаем это
Давайте кратко рассмотрим создание очень простого приложения для Windows Phone на основе служб, доступных на платформе Windows Azure.
Некоторые из ключевых аспектов этой архитектуры и потока данных включают в себя:
- Необходимость аутентификации пользователей приложения Windows Phone. Крупные социальные сети, такие как Facebook, Windows Live, Yahoo! и гугл кажутся логичным выбором. Мы позволим Windows Azure Access Control Services (ACS) справиться с этой работой (более подробно ниже).
- Служба WCF REST будет служить основным держателем бизнес-логики и обеспечивать безопасный доступ к нашим данным.
Здесь необходимо отметить, как телефон получает доступ к данным таблицы и больших двоичных объектов в Windows Azure. Нативный API для Windows Azure — это REST API. Это включает доступ к хранилищу, такому как таблицы и блобы. Одним из аспектов безопасности хранилища Windows Azure является то, что весь доступ защищен ключами доступа. Ключ доступа необходимо отправлять в каждом запросе (часть вызова REST) в Windows Azure. Эти ключи должны храниться в секрете. Поскольку мы должны хранить наши секреты в секрете, мы не хотим ставить фактические ключи доступа на телефоне. Это позволило бы раскрыть нашу секретную информацию, и это может быть плохо для нас. Можно изменить ключи доступа (например, если ключи скомпрометированы), и в случае их изменения нам потребуется обновить приложение, чтобы получить новый ключ. Быть в безопасности,мы создаем прокси-веб-сервис, с помощью которого все запросы к хранилищу будут направляться. Это держит нашу секретную информацию в секрете и позволяет нам разрабатывать сервисы очень SOA-образом.
Есть два основных способа, которыми мы можем создать этот прокси-сервер веб-службы. Превосходные люди из Microsoft создали Windows Azure Toolkit для Windows Phone, который предоставляет множество ресурсов и примеров для написания приложений для Windows Phone, использующих службы Windows Azure. В этот инструментарий включены шаблоны проектов, которые запускают процесс работы с ACS, хранилищами (таблицами, BLOB-объектами и очередями) и даже рецептами push-уведомлений.
Однако для целей этого примера мы собираемся создать простой сервис REST WCF, который мы можем легко использовать из нашего приложения для Windows Phone. Служба WCF будет не только служить прокси для доступа к хранилищу Windows Azure, но и будет содержать нашу бизнес-логику. Если бы мы захотели, мы могли бы расширить службу WCF и для других целей — например, для включения веб-приложения ASP.NET или даже приложений для других мобильных платформ. Мы не будем слишком углубляться в различные аспекты хранилища Windows Azure, поскольку это подробно рассматривается в учебном комплекте по платформе Windows Azure (см. Раздел « Изучение хранилища Windows Azure »).
Хранение стола
Для начала нам понадобится базовая сущность, которую мы будем хранить в табличном хранилище Windows Azure.
1: public sealed class Car : TableServiceEntity
2: {
3: /*
4: * PartitionKey = make
5: * RowKey = current date/time in UTC
6: */
7:
8: public Car()
9: {}
10:
11: public Car(string make, string model, int year, string description, string imageUrl)
12: {
13: PartitionKey = make;
14: RowKey = DateTime.UtcNow.Ticks.ToString();
15:
16: Make = make;
17: Model = model;
18: Year = year;
19: Description = description;
20: ImageUrl = imageUrl;
21: }
22:
23: public string Make { get; set; }
24: public string Model { get; set; }
25: public int Year { get; set; }
26: public string Description { get; set; }
27: public string ImageUrl { get; set; }
28: }
На этом этапе мы можем создать простой метод как часть нашей службы WCF, который может обрабатывать некоторую бизнес-логику (возможно, проверяет ключ приложения) и сохранять объект в табличном хранилище. (Примечание. Класс CarDataSource — это простой класс-обертка, созданный для упрощения некоторого кода — посмотрите весь класс в загрузке решения в конце этого поста.)
1: public class CarService : ICarService
2: {
3: public void AddCar(Car car)
4: {
5: try
6: {
7: var key = ValidateApplicationKey();
8: if (key)
9: {
10: var carDataSource = new CarDataSource();
11: carDataSource.CreateCar(car);
12: }
13: }
14: catch (Exception)
15: {
16: throw new WebFaultException<string>("Failed to create a new car.", HttpStatusCode.InternalServerError);
17: }
18: }
19: }
Имея сервис на месте, мы можем вызвать сервис из нашего приложения для Windows Phone так же, как и любой другой веб-сервис RESTful. Загрузите полный пакет кода для просмотра этого кода.
Хранение BLOB-объектов
Как упоминалось ранее, хранилище BLOB-объектов Windows Azure предоставляет средства для хранения содержимого, такого как документы PDF, изображения, фильмы или любой другой файл, который у вас может быть. Каждый файл считается «BLOB-объектом», а BLOB-объекты находятся в контейнере. Контейнеры (и, следовательно, результирующие большие двоичные объекты) по умолчанию доступны только тем, у кого есть соответствующий ключ доступа к хранилищу (тот же ключ, который используется хранилищем таблиц). С помощью ключа доступа мы можем выполнить любую операцию (читать, создавать, удалять и т. Д.). Можно изменить разрешения для контейнера, чтобы разрешить анонимный доступ для чтения, что может быть здорово, когда, например, нам нужен кто-нибудь для просмотра изображений из приложения Windows Phone.
Что нам делать, если мы хотим разрешить кому-либо иметь доступ к контейнеру только в течение определенного периода времени и иметь только определенный набор разрешений в течение этого времени? Ответ заключается в использовании подписи общего доступа (SAS) . Подпись общего доступа — это специально созданная строка запроса URL-адреса, которая содержит предоставленные разрешения (только создавать, только удалять, создавать и удалять и т. Д.) И период времени, в течение которого эти разрешения действительны. Мы можем создать SAS, а затем предоставить его любому, кому мы хотим предоставить доступ к хранилищу BLOB-объектов. В нашем примере мы можем запросить подпись общего доступа из службы WCF, а затем использовать URL-адрес SAS для сохранения изображений непосредственно с нашего телефона в хранилище BLOB-объектов Windows Azure.
Процесс создания подписи общего доступа у нас будет следующим:
1: public Uri CreateCarImageSharedAccessSignature()
2: {
3: Uri signatureUri = null;
4:
5: var key = ValidateApplicationKey();
6: if (key)
7: {
8: try
9: {
10: CloudBlobContainer container = CreateContainer("cars");
11:
12: // Set permissions on the container.
13: var sas = container.GetSharedAccessSignature(
14: new SharedAccessPolicy
15: {
16: Permissions =
17: SharedAccessPermissions.Write |
18: SharedAccessPermissions.List,
19: SharedAccessStartTime = DateTime.UtcNow,
20: SharedAccessExpiryTime = DateTime.UtcNow + TimeSpan.FromMinutes(5)
21: });
22:
23: // Trim the leading '?' to prevent there from being two in the resulting URI.
24: var uriBuilder = new UriBuilder(container.Uri) {Query = sas.TrimStart('?')};
25: signatureUri = uriBuilder.Uri;
26: }
27: catch (Exception ex)
28: {
29: throw new WebFaultException<string>(ex.Message, HttpStatusCode.InternalServerError);
30: }
31: }
32: return signatureUri;
33: }
Контроль доступа
Теперь, когда у нас есть основы для доступа к службам хранения Windows Azure, давайте добавим способ аутентификации пользователей нашего приложения. Ранее мы кратко обсудили службы контроля доступа (ACS) в Windows Azure. ACS предоставляет федеративное решение для управления идентификацией на основе утверждений. Это позволяет нам аутентифицировать пользователей по Facebook, Yahoo !, Windows Live ID или Google без необходимости писать код для каждого из них! После аутентификации мы получим серию претензий, которые содержат информацию о пользователе (обычно его имя и адрес электронной почты). Затем мы можем использовать эти данные для персонализации приложения или для обработки какой-либо формы регистрации пользователя (запросите дополнительную информацию у пользователя). Выбор поставщика идентификации полностью за нами, и все это делается с помощью конфигурации.
ACS — очень мощный, но простой в использовании сервис. Чтобы узнать больше о ACS, пожалуйста, посетите http://www.microsoft.com/windowsazure/learn/control-access/#introductory .
Добавить поддержку ACS в существующее приложение Windows Phone очень просто. Microsoft недавно выпустила пакет NuGet, который делает процесс довольно простым. Пакет NuGet хорош тем, что позволяет создать очень гибкое решение — мы можем просто добавить ACS в наше приложение и сделать это быстро и ввести минимальные зависимости. Вы можете найти пакет NuGet, выполнив поиск «Служба контроля доступа» в инструменте управления пакетами NuGet в Visual Studio.
Или вы можете установить пакет из консоли управления пакетами NuGet.
PM> Install-Package Phone.Identity.AccessControl.BasePage
В любом случае в вашем приложении Windows Phone будут установлены необходимые элементы управления и заполнители для использования ACS. После настройки вы захотите следовать предоставленным инструкциям по настройке приложения Windows Phone для использования конфигурации ACS. Использование пакета NuGet для добавления поддержки ACS в ваше приложение Windows Phone считается довольно сложным процессом, поскольку он по-прежнему оставляет нам конфигурацию ACS. Есть подробные инструкции здесь , которые обеспечивают отличный шаг за шагом пошаговое руководство по созданию нового пространства имен ACS и любой необходимой конфигурации. Задание 2 в этом пошаговом руководстве, вероятно, является хорошей отправной точкой, но в целом пошаговое руководство также отлично читается.
Всплывающее уведомление
Если мы хотели, также очень легко добавить поддержку push-уведомлений в наше решение. Существует новый пакет NuGet, который делает добавление необходимых настроек очень простым — очень похоже на то, что мы видели при добавлении поддержки Access Control Services. Процесс для этого хорошо продемонстрирован в видео на канале 9 .
Пакеты NuGet для поддержки Push-уведомлений также довольно просты.
PM> Install-Package Phone.Notifications.BasePage (client/phone side – sets up registration/registration with the Push Notification cloud service) PM> Install-Package CloudServices.Notifications (server side –works with Microsoft Push Notification Service)
Недавно Microsoft выпустила несколько пакетов NuGet, которые позволяют с легкостью работать с Windows Azure из наших приложений для Windows Phone. Существуют пакеты для ACS, push-уведомлений и членства (традиционное имя пользователя / пароль). Обязательно ознакомьтесь с этими пакетами, поскольку они позволят вам легко комбинировать и сочетать функции, необходимые для вашего приложения.
Заверните
Теперь мы должны быть в комплекте с нашим облачным приложением для Windows Phone! Здесь мы увидели, как легко использовать несколько сервисов, доступных на платформе Windows Azure. Мы можем легко создать веб-службу, которая будет предоставлять доступ к нашей бизнес-логике и служить прокси-сервером для служб хранения Windows Azure. Также довольно просто добавить Facebook, Yahoo !, Windows Live ID или Google аутентификацию в существующее приложение благодаря новым пакетам NuGet. Загрузите полный пример ниже.
Не забудьте принять участие в конкурсе «Go Mango» по адресу http://bit.ly/MangoOffer , промо-код «MCOLL».
Вы можете войти, чтобы выиграть новый планшет Samsung Series 7, а также бесплатную рекламу для своего приложения для Windows Phone! Если вы используете Windows Azure для работы со своим мобильным приложением, вы получите бонусную запись!
Чтобы загрузить полный пример приложения, использующего код из примера выше, нажмите кнопку «Загрузить код» ниже:
Чтобы начать работу с Windows Azure, подпишитесь на бесплатную 90-дневную пробную версию по адресу http://www.microsoft.com/windowsazure/free-trial/ .
Ресурсы
- Windows Azure
- Windows Azure SDK
- Учебный комплект по платформе Windows Azure
- Windows Azure Toolkit для Windows Phone 7
- Пакеты NuGet для Windows Azure и Windows Phone
- Службы контроля доступа Windows Azure
- Как создать учетную запись хранения Windows Azure
- Сценарии использования Windows Azure с мобильными приложениями
- Значки архитектуры Windows Azure предоставлены Дэвидом Паллманном .
Завтра мы собираемся обсудить использование образцов данных и то, как мы можем использовать Expression Blend, чтобы сделать это невероятно простым для нас. Увидимся позже!
Источник: http://www.jeffblankenburg.com/2011/11/17/31-days-of-mango-day-17-using-windows-azure/