Поиск на сайте: Расширенный поиск


Новые программы oszone.net Читать ленту новостей RSS
CheckBootSpeed - это диагностический пакет на основе скриптов PowerShell, создающий отчет о скорости загрузки Windows 7 ...
Вы когда-нибудь хотели создать установочный диск Windows, который бы автоматически установил систему, не задавая вопросо...
Если после установки Windows XP у вас перестала загружаться Windows Vista или Windows 7, вам необходимо восстановить заг...
Программа подготовки документов и ведения учетных и отчетных данных по командировкам. Используются формы, утвержденные п...
Red Button – это мощная утилита для оптимизации и очистки всех актуальных клиентских версий операционной системы Windows...
OSzone.net Microsoft Разработка приложений Облако/Azure Придайте мощь современным приложениям с помощью Windows Azure Mobile Services RSS

Придайте мощь современным приложениям с помощью Windows Azure Mobile Services

Текущий рейтинг: 0 (проголосовало 0)
 Посетителей: 492 | Просмотров: 597 (сегодня 0)  Шрифт: - +
Независимо от платформы, на которую вы ориентируетесь при публикации приложения, Windows Azure Mobile Services (WAMS) способен управлять приложениями для любых платформ. Это ключевой компонент платформы Windows Azure и серверная часть для разработки веб- и кросс-платформенных современных приложений. В этой статье я расскажу, как подготовить WAMS к работе в Visual Studio, дам обзор WAMS API и поясню, какой код необходим для создания современного приложения с применением WAMS.

Кросс-платформенная архитектура WAMS

Существует много сервисов Windows Azure, которые можно применять для управления данными и в качестве серверной части приложения, и не редкость, когда приложения используют более одного сервиса Windows Azure. Ниже перечислены некоторые из доступных сервисов.

  • WAMS Кросс-платформенный, полнофункциональный набор серверных сервисов и ресурсов, предназначенных специально для быстрого построения приложений.
  • SQL Azure Это все тот же популярный SQL Server, но в облаке и с простым в использовании веб-интерфейсом администрирования. Эффективен и экономичен для начинающих компаний, небольших предприятий и ISV (независимых поставщиков ПО).
  • Windows Azure Table Storage NoSQL-способ работы с табличными и иногда не совсем табличными данными.
  • Windows Azure Binary Large Object (BLOB) Storage Высокомасштабируемое хранилище, содержащее данные в облаке в виде пар «ключ-значение» без ограничений, свойственных структурированным данным.
  • Windows Azure Web Sites Кроме хостинга веб-сайтов, Windows Azure Web Sites позволяет работать с ASP.NET и ASP.NET Web API. Это отличный способ придать мощь устаревшим веб-сайтам и приложениям, работающим по HTTP, без значительной переделки их архитектуры.

Архитектура приложения будет зависеть от его требований. Если приложению нужно хранить большие объемы медийного или двоичного контента (например, десятки или сотни гигабайт данных), применение Windows Azure BLOB Storage скорее всего будет лучшим решением. Для большинства приложений, которые просто читают и пишут текстовые данные с какими-то сопутствующими картинками, WAMS является подходящим и простым решением. Многим приложениям приходиться иметь дело с унаследованными данными, поэтому миграция с SQL Server, SQL Server Compact Edition (SQL CE) или любого другого семейства баз данных Microsoft SQL непосредственно на SQL Azure может оказаться лучшим путем, если вам требуется DBA для администрирования данных.

Для большинства приложений WAMS вполне подходит, потому что он не только обеспечивает хранение данных, но и предоставляет полный набор сервисов на серверной стороне поверх базы данных, создаваемой в целях поддержки распространенных вариантов инфраструктуры приложений, где необходимы оповещающие уведомления (push notifications) и аутентификация.

Базовые сервисы WAMS

Следующие функции являются базовыми сервисами WAMS.

  • Данные Конечно, хранение и манипуляции данными являются существенной частью почти любого приложения, поэтому WAMS поддерживает эту функцию. Для каждого мобильного сервиса существует своя база данных SQL Azure.
  • Обмен сообщениями Оповещающие уведомления становятся все важнее, так как пользователи хотят быть в курсе актуальных событий. По мере того как приложения постоянно усложняются и приобретают более интуитивно понятный и дружественный к пользователю интерфейс (иначе говоря, становятся более современными), такие функции, как обмен оповещающими сообщениями и коммуникации в реальном времени превращаются в стандартные. К счастью, использование оповещающих уведомлений в WAMS не сложнее вызова для отправки тоста (небольшого всплывающего сообщения в верхнем или нижнем справа углу экрана на клиентском компьютере):
push.wns.sendToastText04(channel, { text1: item.text });
  • Аутентификация Защита данных, особенно пользовательских, так же важна, как сами данные. Краеугольный камень современных приложений — аутентификация через широко популярные веб-сайты вроде Facebook или Twitter, поэтому WAMS позволяет выполнять аутентификацию с применением любого из следующих провайдеров идентификации:
  1. Microsoft Account (провайдер аутентификации, ранее называвшийся как Windows Live ID);
  2. логин в Facebook;
  3. логин в Twitter;
  4. логин в Google.

WAMS предоставляет несколько библиотек для разработки различных Windows-приложений, включая библиотеку Windows Runtime (WinRT) для управляемых клиентов, клиентскую библиотеку Windows Library for JavaScript (WinJS) и Representational State Transfer (REST) API для всего — базовых сервисов, аутентификации и обмена сообщениями. Есть даже клиентские библиотеки для iOS и Android.

Применение WAMS API в проектах Windows Store или Windows Phone

Создаете вы приложение Windows Store или Windows Phone, код будет почти идентичным, а код на JavaScript очень похож на WinJS-код. Если у вас есть необходимые средства разработки и WAMS подготовлен и сконфигурирован (детали см. по ссылке bit.ly/NAAQz8), то написание кода для обращения к объектам и данным в мобильном сервисе — задача несложная, но отличающаяся от таковой в традиционных клиент-серверных или многоуровневых приложений. Это вызвано тем, что WAMS интегрируется с приложением так, что определенные изменения в модели приложения могут повлечь за собой изменения в нижележащих структурах данных. Другими словами, вы можете выбросить многие из традиционных SQL-выражений для определения данных и просто модифицировать члены класса, заново скомпилировать и запустить приложение, а потом проверить изменения на уровне базы данных. Кроме того, JavaScript занимает место SQL как синтаксис для повседневных задач поддержки базы данных, таких как запуск скриптов проверки или создание ограничений. Возможность скриптового управления изменениями в базе данных из приложения, командной строки и утилиты веб-администрирования ускоряет процесс создания приложения.

Пространство имен Microsoft.WindowsAzure.MobileServices предоставляет стандартный доступ к объектам в мобильном сервисе или его нижележащей базе данных SQL Azure. В следующем примере кода создается экземпляр MobileServiceClient:

public static MobileServiceClient MobileService = new MobileServiceClient(
"https://your-very-own-service-url.azure-mobile.net/",
"your-very-own-key-that-is-a-gigantic-string-of-characters-and-numbers"
);

Как видите, ваши URL и ключ WAMS-приложения являются параметрами конструктора MobileServiceClient. Чтобы найти эти URL и ключ, войдите в портал Windows Azure и перейдите в своему мобильному сервису, затем щелкните значок облака слева от элемента меню в информационной панели.

В предыдущем примере кода класс MobileServiceClient ведет себя в какой-то мере подобно объекту соединения, но безо всяких докучливых методов открытия и закрытия из эпохи объекта SqlConnection. Класс MobileServiceClient управляет соединениями за вас. Если ваши данные общедоступны, тогда вам не требуется вызывать метод MobileServiceClient.login — вы и без него сможете обращаться к таблицам, выполнять запросы и сортировать данные. Конечно, более сложные или связанные с безопасностью операции могут потребовать указания удостоверений.

Получив действительный экземпляр класса MobileServiceClient, вы можете использовать GetTable<T> для взаимодействия с нижележащей WAMS-таблицей:

private IMobileServiceTable<Person> personsTable =
  MobileService.GetTable< Person>();

Параметр-тип T в IMobileServiceTable<T> заставляет компилятор анализировать свойства и информацию об этом параметре (в данном случае о классе Person на рис. 1), сопоставляя его с нижележащей таблицей на уровне базы данных. Это позволяет добавлять или модифицировать свойства в ходе разработки и наблюдать за тем, как изменения в схеме отражаются в облаке в период выполнения. Однако изменения в схеме на уровне базы данных не вносятся автоматически при каждом изменении в коде. Например, добавление свойства в код на рис. 1 приведет к созданию нового поля в таблице, а удаление существующего свойства не вызовет операцию удаления.

Рис. 1. Класс Person

// Код модели данных/класса
public class Person
{
  public int Id { get; set; }
  public string Name { get; set; }
  [DataMember(Name = "Birthday")]
  public DateTime Date { get; set; }
  public string Picture { get; set; }
  public string Notes { get; set; }
}

GetTable<T> возвращает объект IMobileServiceTable, который представляет нижележащую таблицу в WAMS и содержит методы для сервисов вставки, обновления, удаления и сортировки:

// Выполняем асинхронное удаление,
// где item имеет тип Person (см. рис. 1)
await itemsTable.DeleteAsync(item);
// Выбираем конкретные записи с помощью LINQ-запроса
var people = personsTable.Select(p => p.Birthday > DateTime.Now.AddDays(14));

Вы можете создать свой уровень данных в коде, создав собственный класс, имена членов которого совпадают с именами полей таблицы. Этот метод известен под названием «соглашение превыше конфигурации» (convention over configuration); он позволяет сократить раздутый XML-код конфигурации и отдать предпочтение согласованности в именовании, что уменьшает объем кода и упрощает его сопровождение. Например, класс и схема на рис. 1 демонстрируют, что код клиентского класса сопоставляется с WAMS-таблицей и ее членами.

Код на рис. 1 создает схему базы данных, показанную в табл. 1.

Табл. 1. Соглашение превыше конфигурации требует соответствия кода класса именам в схеме базы данных

ПолеТип
IdSQL Bigint
NameString
DateDateTime
PictureString
NotesString


WAMS логически распознает типы данных по типу данных свойств в коде. Однако некоторые типы нельзя представить атрибутами данных, особенно изображение и двоичные данные. То есть, когда вы хотите сохранить изображение, вы должны использовать Windows Azure BLOB Storage, так как оно более масштабируемое, дешевле и работает намного лучше, чем его альтернатива, которая заключается в кодировании изображения по базе Base64 в строку с последующим помещением ее в WAMS-таблицу. Windows Azure BLOB Storage имеет REST API и управляемый API, поэтому разработчики могут легко обращаться к сервисам на разных платформах.

Для выполнения операций вставки, обновления и удаления просто создайте экземпляр собственного объекта и вызовите соответствующий метод из вашего объекта IMobileServiceTable:

Person person = new Person {
  Name = "Alan Turing",
  Birthday = DateTime dte = new DateTime(1912,6,23),
  // Кодирование изображения осуществляется
  // где-то в другом месте кода
  Picture = base64string,
  Notes = "A father of modern computer science." +
    " There is a test named after him that I fail regularly"};
await personsTable.InsertAsync(person);

Поскольку вызов InsertAsync со всей очевидностью является асинхронным, он не блокирует UI-код, и вы можете управлять данными в фоне, не мешая работе пользователя. Приложения Windows Store и Windows Phone работают в асинхронном режиме по умолчанию, так как гарантировать надежную связь можно далеко не всегда.

Если вы работаете в XAML, то можете задействовать связывание с данными вызовом метода ToListAsync объекта IMobileServiceTable. Этот метод подготавливает данные и возвращает их в объект, который связывает WAMS-таблицы с XAML-элементами ListView, как демонстрирует следующий пример кода:

var results = await todoTable.ToListAsync();
items = new ObservableCollection<TodoItem>(results);
ListItems.ItemsSource = items;

Этот код похож на традиционный код связывания с данными в Microsoft .NET Framework. Кроме того, можно вызывать методы объекта IMobileServiceTable для возврата IList<T> или IEnumerable<T>, если вы хотите вручную перебирать данные вместо привязки к ним.

Управление дополнительными средствами WAMS

Конечно, вам потребуется администрировать и управлять мобильным сервисом, его данными, безопасностью и выполнять все рутинные операции, связанные с поддержкой на серверной стороне, поскольку не все эти операции следует делать в приложении. К счастью, WAMS предоставляет несколько вариантов для выполнения административных задач на серверной стороне.

  • Утилита командной строки Подходит для любой платформы разработки; вы можете использовать любой способ ввода команд после загрузки и установки библиотек командной строки (подробнее см. по ссылке bit.ly/14Q49bi).
  • Веб-администрирование Подходит для разработки кросс-платформенной серверной части; также называется порталом Windows Azure. Этот инструмент позволяет выполнять все базовые операции: создавать базы данных, запускать серверные скрипты, управлять сервисами, контролировать безопасность и т. д. (этот портал доступен с главной страницы сайта Windows Azure по ссылке bit.ly/4yqVhP).
  • SQL Server Management Studio Классический инструмент администрирования баз данных Microsoft, который можно использовать для подключения и управления базами данных, размещенных за мобильным сервисом (подробнее см. по ссылке bit.ly/VdqpZH).

В WAMS включен краткий, но полный справочник по WAMS-скриптам для серверной стороны (bit.ly/XvsVec). Вы можете выполнять команды из утилиты командной строки или с портала Windows Azure. В командной строке просто введите команду azure mobile, чтобы увидеть список всех доступных команд, и azure mobile list для перечисления всех ваших мобильных сервисов.

Как и код вашего приложения, скриптовые функции на серверной стороне «регистрируются» в таблице по соглашениям об именовании, поэтому сигнатуры скриптов должны совпадать с сигнатурами методов для операций вставки, чтения, обновления и удаления. Вот сигнатуры скриптов на JavaScript для манипуляций над данными:

  • функция вставки            insert (item, user, request) { ... }
  • функция чтения               read (query, user, request) { ... }
  • функция обновления     update (item, user, request) { ... }
  • функция удаления          del (id, user, request) { ... }

Заметьте: все, что вам нужно, включается как параметры метода, т. е. строка данных, идентификация пользователя и сам запрос. Это позволяет использовать защиту на уровне строк, а также выполнять любой тип серверных правил, скажем, проверку данных при соответствующих операциях.

В качестве примера вы могли бы выполнять проверку для ограничения длины вставляемой строки. Для этого используйте такой код:

function insert(item, user, request) {
  if (item.text.length > 20) {
    request.respond(statusCodes.BAD_REQUEST,
    'The length of the input text must be less than 20');
  } else {
    request.execute();
    }
}

Хотя эти скрипты можно модифицировать на портале Windows Azure, вы можете делать то же самое в предпочитаемом вами текстовом редакторе и сохранять файлы с расширением .js, например person.insert.js. Затем подготовленные скрипты можно загрузить на серверную сторону через командную строку командой со следующим синтаксисом и сигнатурой:

azure mobile script upload <service-name> table/<table-name>.<operation>.js

Команда для загрузки предыдущего скрипта-примера выглядела бы следующим образом (где NotablePeople — имя сервиса, а person — имя таблицы):

azure mobile script upload NotablePeople table/person.insert.js

Как и следовало бы ожидать, ошибку при проверке можно захватывать выражением try/catch на любом языке клиентской стороны.

Увы, в этот момент SQL-разработчики могут почувствовать себя отставшими от жизни из-за всех этих новейших тенденций с серверным JavaScript, но им станет привычнее при использовании SQL внутри скриптового объекта mssql, даже если он смешивается с JavaScript:

mssql.query('select * from people', {
  success: function(results) {
    console.log(results);
  }
});

Это особенно полезно, если у вас есть опыт корпоративных разработок, изобилующих SQL-кодом, так как он сильно отличается от динамической природы JavaScript.

В заключение хотелось бы отметить, что WAMS — это полный набор сервисов на серверной стороне для быстрой разработки кросс-платформенных приложений. Все сервисы Windows Azure, кроме SQL Azure, автоматически реализуют URL, дружественные к REST, а поскольку REST является кросс-платформенным, нет нужды заботиться о том, сможет ли архитектура вашего приложения и в будущем поддерживать новые клиентские устройства или пользовательские агенты. Тем временем, работа с WAMS не требует установки никакого изощренного ПО на клиенте благодаря мощным средствам веб-администрирования и командной строки, а также простым в использовании API для всех операций — от базового хранения данных до массовых рассылок по электронной почте и оповещающих уведомлений.

Автор: Рэчел Аппель  •  Иcточник: MSDN Magazine  •  Опубликована: 24.07.2013
Нашли ошибку в тексте? Сообщите о ней автору: выделите мышкой и нажмите CTRL + ENTER
Теги:  


Оценить статью:
Вверх
Комментарии посетителей
Комментарии отключены. С вопросами по статьям обращайтесь в форум.