Введение в облачные решения Microsoft

Облачные решения и особенности их проектирования. Стоимость облачного решения. Модели организации мультитенантного хранилища данных. Характеристика интерфейсов программирования приложений. Особенности создания и работы с реляционным хранилищем данных.

Рубрика Программирование, компьютеры и кибернетика
Вид курс лекций
Язык русский
Дата добавления 23.05.2016
Размер файла 2,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Кроме того, имеется поддержка следующих технологий:

ADO.Net 3.5 SP1

LINQ

WCF Data Services

ADO.Net Entity Framework 3.5 SP1 4.0

Поддерживается использование в качестве клиентского приложения Microsoft Office 2010.

В случае, если технологии Microsoft не используются компанией, обращение к SQL Azure возможно при помощи драйверов SQL Server 2008 Native Client ODBC и SQL Server 2008 Driver for PHP, а также через REST - протокол.

Организация хранения данных

Есть три основных механизма, обеспечивающих работу с SQL Azure:

учетная запись

сервер

база данных

При этом, необходимо знать следующее.

Учетная запись является владельцем по отношению к серверу. У одной учетной записи может быть несколько серверов.

Сервер - логический элемент, функционально аналогичный Master DB в MS SQL Server. Сервер - это единица аутентификации, отчетности и георасположения.

База данных непосредственно хранит SQL - объекты в рамках сервера, такие как пользователи, таблицы, представления и т.п.

Синхронизация данных

Технология синхронизации данных в SQL Azure построена на основе технологии Microsoft Sync Framework.

Механизмы синхронизации позволяют связывать существующие хранилища данных, расположенные на стороне заказчика, с SQL Azure, обеспечивать доступ к локальным данным через платформу Windows Azure и реализовывать сценарии работы в отсоединенном режиме.

Особенностями SQL Azure Data Sync являются:

Sync - расписание: пользователь может задавать интервал синхронизации самостоятельно;

No - Code Sync конфигурация: пользователь задает данные, которые должны быть синхронизированы с использованием инструментария, поставляемого сервисом;

Пользователь может задать таблицы для синхронизации между базами данных SQL Azure ;

Сервисы регистрации и мониторинга позволяют отслеживать статус синхронизации и их историю.

Выделяют три основных сценария, при которых может понадобиться синхронизация данных:

Синхронизация данных между MS SQL Server и SQL Azure.

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

Синхронизация данных между SQL Azure и приложениями в отсоединенном режиме. К примеру, распределенные мобильные решения сбора данных.

7. Знакомство с Windows AppFabric и компоненты Windows AppFabric

По сути, функционал Windows Azure AppFabric - основное отличие "облачной" платформы Windows Azure от смежных решений компаний - конкурентов.

AppFabric позволяет пользователям "облака" получать доступ через локальную сеть к собственным "облачным" сервисам, обеспечивая интеграцию с существующими системами безопасности ( Active Directory и т.д.).

Найти определение Windows Azure AppFabric не составляет труда - это программные сервисы обеспечения коммуникаций и контроля доступа, Service Bus и Access Control соответственно. Тем не менее, AppFabric остается одной из наиболее труднопонимаемых областейWindows Azure.

AppFabric предоставляет инструменты для создания приложений работающих не только в "облачной" среде, но и в рамках инфраструктуры заказчика, в том числе на платформах Windows Server, Java, Ruby, PHP и т.д.

Практикующим разработчикам также пригодится следующий адрес - http://blogs.msdn.com/b/windowsazureappfabric/ - обновляемый ресурссоветов, обновлений, шаблонов и примеров применения AppFabric.

По своей сути, AppFabric является звеном связывающим приложения на основе Windows Azure, а также иные приложения "облаком".

Сервисы AppFabric

AppFabric Service Bus

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

Рис. 9.1. AppFabric Service Bus

Service Bus используется для:

установления связи между приложениями платформы Windows Azure с существующими приложениями и базами данных;

связи между приложениями инфраструктуры заказчика;

создания составных приложений.

К одним из главных преимуществ Service Bus можно отнести возможность установления связи между приложениями через проблемные границы сети (брандмаузеры, NAT и т.д.).

AppFabric Access Control

Сервисы Access Control обеспечивают управление доступом к приложениям и сервисам и интеграцию с имеющимися у заказчика средствами авторизации. Поддерживаются стандартные механизмы аутентификации (к примеру Windows Live ID, Active Directory ). Основой сервиса Access Control является Windows Identity Foundation.

Таким образом, AppFabric Access Control:

Принимает запросы доступа от приложений.

Передает маркеры безопасности приложениям.

Выполняет проверку пользователей.

Caching

Сервисы кэширования AppFabric предоставляет, очевидно, распределенное кэширование для приложений на основе Windows Azure и SQL Azure. Сервис не требует установки, позволяет динамически изменять объем предоставляемой кэш-памяти.

Рис. 9.2. Windows Azure AppFabric Caching

Сервис кэширования AppFabric позволяет:

увеличить производительность ASP.Net приложений на базе Windows Azure, при отсутствии необходимости внесения изменений в код;

уменьшает временную задержку доступа к данным, хранящимся в SQL Azure базах данных или Windows Azure Storage.

Безопасность авторизации и доступа обеспечивается сервисом Access Control.

Integration

Данный сервис еще не доступен для разработчиков, он должен появиться в составе CTP в 2011

Сервисы интеграции AppFabric обеспечивают возможности BizTalk Server в Windows Azure, на основе готовых шаблонов, упрощающих и ускоряющих процесс разработки.

По своей сути, данный сервис, предоставляет возможность объединения "облачных" приложений, локальных решений и приложений бизнес - партнеров в логическое целое рис. 9.3.

Рис. 9.3. Windows Azure AppFabric Integration

CompositeApp

Данный сервис еще не доступен для разработчиков, он должен появиться в составе CTP в 2011

CompositeApp сервис предоставляет мультитенатный, управляемый сервис, использующий .Net, основанный на AppFabric CompositionModel, автоматизирующий развертывание приложения. Сервис напрямую запускает приложение, обеспечивая высокопроизводительную среду, оптимизированную для работы с "облачными" решениями. Также CompositeApp обеспечивает хостинг для веб - приложений, построенных на основе WCF и рабочих процессов, на основе WPF.

8. Инструметарий разработчика Windows Azure

VS 2010 - Windows Azure tools

Windows Azure Tools - расширение Visual Studio (VS), позволяющее создавать, тестировать и отлаживать решения для Azure без необходимости непосредственного подключение к Windows Azure. Созданное приложение, по готовности, может быть развернуто вWindows Azure.

Доступны инструменты для следующих продуктов VS:

VS 2008 - 2010 ;

Visual Web Developer 2008 - 2010.

Возможности инструментов Windows Azure:

Поддержка MS .Net Framework 4.0. Платформа .Net Framework поддерживается, как целевая для разработки ролей, как в самойWindows Azure, так и в средах разработки.

Обозреватель хранилищ Windows Azure. Представляет собой расширение для окна обозревателя серверов, предоставляющее доступ для чтения Blob - объектов и таблиц хранилища Windows Azure.

Обозреватель вычислений Windows Azure. Представляет собой расширение для окна обозревателя серверов, предоставляющее доступ ( ReadOnly ) к состоянию развертывания "облачных" служб Windows Azure.

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

IntelliTrace - отладка. Позволяет вести журнал записей расширенных отладочных сведений для "облачной" службы. Поддерживаетсяпошаговое выполнение кода на основе журнала IntelliTrace.

Отметим, что не все возможности инструментов Azure Tools доступны для поддерживаемых VS - продуктов.

В частности, Windows Azure SDK версии 1.3:

поддерживает роль виртуальной машины - создание пользовательских образов виртуального жесткого диска (бета - версия);

обеспечивает доступ к удаленному рабочему столу - подключение к отдельным экземплярам службы с клиентского приложения;

обеспечивает поддержку IIS в веб-ролях, веб-роль Windows Azure может быть размещена во внешней IIS среде;

поддерживает виртуальные сети ( CTP );

предоставляет расширенный инструментарий диагностики Windows Azure Diagnostics.

Для установки и полноценной работы с SDK 1.3 для Windows Azure необходимо наличие .Net Framework 3.5 SP1, IIS 7.0, MS SQL Server 2005-2008 (в т.ч. Express).

Development Fabric (DF)

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

DF позволяет локально разрабатывать код для Windows Azure. Локальная эмуляция поддерживается в Windows Vista SP1 и выше,Windows 7 и Windows Server 2008.

В состав DF входят следующие исполняемые файлы:

DFAgent.exe ;

DFLoadBalancer.exe ;

DFMonitor.exe.

С ноября 2010 Development Fabric переименован в "compute emulator" (начиная с SDK 1.3).

Development Storage (DS)

Development Storage является средством. позволяющим эмулировать SQL Azure на локальной рабочей станции. При этом в качестве локального хранилища может использоваться MS SQL Server 2005 - 2008, в том числе в Express - издании.

DF позволяет:

разрабатывать структуру хранилища;

создавать локальное хранилище;

запускать и тестировать приложение.

С ноября 2010 Development Storage переименован в " storage emulator" (SE) (начиная с SDK 1.3).

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

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

SE не является масштабируемой службой, т.е. не может поддерживать большое число пользователей.

SE поддерживает отличную от "облачной" URI - схему. Отличие в том, что имя учетной записи указывается как часть иерархического URI пути, а не как часть доменного имени, поскольку использование доменных имен доступно в "облаке", но не локально.

SE поддерживает Blob - хранилище до 2 Гб

размер строки таблицы ( Table service ) не может превышать 1 Мб в SE

Средства разработки на отличных от Microsoft платформах

Ранее упоминалось, что помимо поддержки средств разработки Microsoft инструментарий разработчика Azure также включает в себя:

Инструменты для работы с Eclipse

создание новых проектов

проектный менеджмент

развертывание проекта в Windows Azure

средство просмотра Windows Azure хранилищ

Windows Azure SDK для PHP

Zend Framework

PHP классы для Blob, Table и Queue сервисов

протоколирование операций

средства командной строки - Windowa Azure Command - line Tools for PHP

Windows Azure SDK для Java

Java классы для Blob, Table и Queue сервисов

возможность обзора Windows Azure хранилищ

Доступ к сервисам Azure можно получить посредством стандартов REST, SOAP, Atom, обеспечивая тем самым совместимость с большинством платформ.

Требования к установке Windows Azure SDK

Операционная система.

Windows Azure SDK 1.3 от ноября 2010 года официально поддерживается следующими операционными системами:

Windows 7 (в т.ч. Enterprise; Home Premiumx86, x64; Professional x86, x64; Ultimate x86, x64)

Windows Server 2008 + SP2, Windows Server 2008 R2

Windows Vista + SP2

Программное обеспечение

для Windows Azure SDK:

.Net Framework 3.5 + SP1

IIS 7.0

Microsoft SQL Server 2005 Express

Microsoft SQL Server 2008 (в т.ч. Express)

Исправление WCF http://support.microsoft.com/kb/971842 (при отсутствии SP1 для Windows 7 и Windows Server 2008 R2 -http://www.microsoft.com/downloads/ru-ru/details.aspx?FamilyID=c3202ce6-4056-4059-8a1b-3a9b77cdfdda)

Исправление FastCGI (не для Windows 7) http://support.microsoft.com/kb/967131

для Visual Studio:

для 32битных ОС - исправление Windows Aure IntelliTrace http://archive.msdn.microsoft.com/KB983301

Модуль URL Rewrite http://www.iis.net/download/URLRewrite

Примечание: в материалах данной практической работе будет рассмотрено формирование рабочего места Visual Studio 2010.

Установка и настройка компонентов для формирования рабочего места на основе Visual Web Developer хорошо описана здесь:http://blogs.technet.com/b/isv_team/archive/2010/12/27/3377315.aspx

Убедитесь, что все вышеперечисленные требования соблюдены. После этого можно приступать к непосредственной установке инструментов для работы с Visual Studio (в данном курсе мы рассматриваем версию 2010).

Подготовка рабочего места:

1. Установите VS 2010 и MS SQL Server 2008. Установка данного инструментария подробно описывается во множестве ресурсов и, как правило, не вызывает затруднений. (см. п№1-3 списка вспомогательных материалов)

2. Настройка IIS

для Windows 7

Откройте панель управления (Пуск - Панель управления)

Выберите "Программы и компоненты"

Рис. 11.1.

Раскройте узел "Microsoft .Ner Framework 3.5" и включите элемент "Windows Communication Foundation HTTP Activation"

Рис. 11.2.

Последовательно раскройте узлы "Службы IIS", "Службы Интернета" и "Компоненты разработки приложений", отметьте элементы "ASP.NET" и "CGI".

Рис. 11.3.

В узле "Службы IIS" разверните "Службы Интернета" и "Общие функции HTTP". Отметьте элемент "Статическое содержимое".

Рис. 11.4.

Рис. 11.5.

После этого нажмите "OK" и дождитесь завершения процесса установки отмеченных компонент.

Для Windows 2008

Запустите диспетчер сервера (Пуск - Администрирование - Диспетчер сервера)

Щелкните правой кнопкой мыши на узле "Компоненты" и выберите "Добавить компоненты"

Рис. 11.6.

В списке компонентов, в узле "Возможности .Net Framework 3.0" отметьте ".Net Framework 3.0".

Рис. 11.7.

Аналогичным образом выберите элемент "Активация HTTP" в узле "Активация WCF". И нажмите "Далее". В случае, если появитсядиалоговое окно установки служб для данных компонент, установите их.

Дождитесь окончания установки и перейдите к узлу "Роли" диспетчера сервера.

Установите роль "Веб-сервер", нажав "Добавить роли"

Рис. 11.8.

Рис. 11.9.

Последовательно нажимая Далее" установите необходимую роль.

В узле "Роли" выберите элемент "Веб - сервер(IIS) и нажмите "Добавить службы ролей""

Рис. 11.10.

Выделите службы "Статическое содержимое", "ASP.NET" и "CGI" в узлах "Веб-сервер" и "Разработка приложений" соответственно, если они еще не установлены. Нажмите "Далее", затем "Установить".

Рис. 11.11.

Дождитесь завершения процесса установки.

3. Установите VSCloudService.exe или Windows Azure SDK 1.3. Отметим, что SDK входит в состав VSCloudService.exe.

4. В случае, если у вас 32битная ОС установите исправление №8 списка требуемого ПО.

5. Установите исправления №№6-7 из списка требуемого программного обеспечения.

На этом установку инструментария stand-alone разработки облачных приложений можно считать завершенной.

Знакомство с инструментарием

Теперь необходимо разобраться с тем, что мы установили и где это все искать.

Эмуляторы Compute Emulator (Develop,ent Fabric) и Storage Emulator (development Storage) можно найти в папке Windows Azure SDK\v1.3 (по умолчанию C:\Program Files\Windows Azure SDK\v1.3\). Эмуляторы располагаются в подкаталоге bin.

Для этой цели компанией Microsoft был собран набор ресурсов в группу - Live Services. К примеру, широко известный набор приложенийWindows Live осуществляет контроль и управление данными при помощи Live Services.

Рис. 11.12.

Для этой цели компанией Microsoft был собран набор ресурсов в группу - Live Services. К примеру, широко известный набор приложенийWindows Live осуществляет контроль и управление данными при помощи Live Services.

Создание первого облачного приложения будет рассмотрено в следующей практической работе.

Рис. 11.13. Шаблон проекта Cloud

Отметим, что для работы инструментов созания облачных решений необходимо запустить VS с правами администратора (Рис.12.1).

Рис. 12.1.

Запустим VS 2010 и создадим проект облачной службы с именем WA_first. (Рис.12.2)

увеличить изображение Рис. 12.2.

Добавим к проекту решения веб-роль ASP.NET и рабочую роль (Рис.12.3)

Рис. 12.3.

Результатом будет решение, состоящее из трех проектов (Рис.12.4)

Рис. 12.4.

Файлы ServiceConfiguration.cscfg и ServiceDefinition.csdef являются конфигурационными и используются для определения характеристик облачного решения и его ролей. Конфигурационные файлы упаковываются вместе с кодом и разворачиаются в Windows Azure.

ServiceDefinition.csdef - используется для описания приложения и ролей, хранит настройки одинаковые для всех экземпляров ролей. После запуска приложения содержимое данного файла не может быть изменено.

ServiceConfiguration.cscfg - задает значения настроек, описанных в ServiceDefinition.csdef, указывает число экземпляров каждой роли. Содержимое данного файла может быть изменено и после запуска роли.

Страницу свойств роли Windows Azure можно открыть щелкнув правой кнопкой мыши на роли и выбрав "Свойства" (Рис.12.5).

Рис. 12.5.

Рассмотрим свойства нашей рабочей роли (Рис.12.6)

Рис. 12.6.

В разделе "Конфигурация" можно указать уровень доверия .NET. Полное доверие необходимо для выполнения собственного кода приложений FastCGI. Частичное доверие отключает возможность загрузки и использования клиентский библиотек Windows Azure.

Значение настройки "число экземпляров" определяет количество экземпляров, которые должны быть запущены для службы этой роли.

Свойства размер виртуальной машины определяет характеристики автоматически создаваемой виртуальной машины (Подробнее см."Сервисы хранения данных в Windows Azure. VM - роль" ).

Поскольку мы создаем приложение локально, в учетных данных хранилища в разделе "Диагностика" нужно отметить пункт"Использование эмулятора хранилища Windows Azure" (Рис.12.7), либо вручную ввести строку "UseDevelopmentStorage=true".

Рис. 12.7.

Запуск приложения в режиме эмуляции

Нажав кнопку F5, дождемся окончания построения облачного решения. Результатом будет веб-страница на локальном сервере. В правой части панели задач должна появиться иконка Windows Azure (Рис.12.8)

Рис. 12.8.

Для просмотра информации о работе приложения в режиме эмуляции, нужно щелкнуть правой кнопкой мыши по значку Windows Azure и выбрать "Show Compute Emulator UI" (Рис.12.9)

Рис. 12.9.

Появится окно для просмотра статусов ролей нашего приложения (Рис.12.10).

Рис. 12.10.

Compute emulator - это основной компонент Windows Azure, можно сказать, ядро "облачной" операционной системы, отвечающий за управление виртуальными машинами и экземплярами ролей. Развертывание и старт экземпляра роли начинают ее жизненный цикл.

Подробнее работа по созданию более сложных приложений будет рассмотрена в следующих лабораторных работах.

9. Структурированное хранилище данных Windows Azure Table

Любое приложение вне зависимости от способа его размещения должно где-то хранить данные. При этом данные могут хранить локально, либо удаленно. "Облачный" способ хранения данных предлагает несколько иной способ. Обратив внимание на следующие особенности, которые необходимо учитывать при переносе традиционной реляционной структуры данных в Table Storage в "облаке":

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

Table Storage подходит для хранения реляционных данных, но само по себе данное хранилище реляционным не является. Это значит, то при переносе реляционной структуры данных в "облако", управлять ограничениями между субъектами хранения нужно будет пользователю.

Характеристики

Windows Azure Table поддерживает:

LINQ

ADO.Net Data Services

REST

неограниченное число таблиц и сущностей, без ограничения размеров

целостность каждой сущности

блокировку обновлений и удалений

возможность возврата частичных результатов запросов прерванных по времени ожидания, при этом имеется возможность продолжить дальнейшее выполнение запроса.

Модель данных

Для доступа к Windows Azure Table у приложения должна быть учетная запись. После создания учетной записи, пользователю предоставляется секретный ключ, используемый для аутентификации.

Ключевыми понятиями Table Storage являются:

Таблица - содержит набор сущностей.

Сущность - логически является строкой в таблице. Основной элемент данных. хранящихся в таблице. Содержит набор свойств.

Свойство - Значение, хранимое в сущности.

Как мы уже отмечали ранее, проводя аналогии с реляционным подходом, получим следующее: под таблицей понимается коллекция сущностей ( Entities ), подобных кортежам в реляционном подходе. Сущность же представляет собой набор свойств (Properties). Свойство же является парой "имя (name) - типизированное значение (typed value)". Сущности можно соотнести с полями в таблице в реляционном хранилище.

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

ключ строки - свойство ключа таблицы, уникальный идентификатор сущности.

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

секция - набор сущностей с одинаковыми ключами секции.

порядок сортировки - в CTP версии предоставлен только один индекс, сортирующий сначала по ключу секции, затем - по ключу строки.

Ограничения таблиц, сущностей и их свойств:

Имена свойств таблиц должны состоять только из букв и цифр.

Имя таблицы не должно начинаться с цифры.

Имена таблиц различают регистры.

Длина имени таблицы должна быть в пределах от 3 до 63 символов

Сущность может иметь не более 255 свойств

Свойства "ключ секции" и "ключ строки" не могут быть больше 1Кб размером.

Свойство "временная метка" является ReadOnly.

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

Суммарный объем всех данных не может превышать 1Мб

Секционированиe

Частично секционирование было нами пояснено в предыдущей части настоящей лекции. Рассмотрим его более детально.

Масштабируемость системы хранения данных зависит от распределения секций по узлам хранения.

Система распределяет секции по узлам хранения по результатам истории использования секций, т.е. если ряд секций запрашивается чаще остальных, то система автоматически распределит их по нескольким узлам хранения, распределяя трафик между несколькими серверами. Важно помнить, что при этом объем секции не ограничен размерностью узла хранения.

Кроме того, хранение сущностей одной секции вместе позволяет повысить эффективность кэширования и других методов повышения производительности.

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

Особенности выбора ключа секции

Выбор ключа секции - задача, которая сложнее чем кажется. С одной стороны, размещение сущностей в одной секции позволяет оптимизировать выполнение запросов, с другой - чем больше секций в одной таблице, тем проще для WAT распределить сущности по местам хранения, обеспечивая масштабируемость таблицы.

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

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

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

Запуск хранилища разработки

Рассмотрим более подробно работу с Storage Emulator. По умолчанию Storage Emulator устанавливается в папку devstore подкаталогаbin, папки Windows Azure SDK.

увеличить изображение Рис. 14.1.

Здесь можно найти два .exe файла:

1. DSInit - инициализирует локальное хранилище и устанавливает права доступа к нему. Запустив этот файл, при отсутствии ошибок, должно появиться следующее окно:

Рис. 14.2.

Как видно, была создана локальная база данных для разработки, и зарезервированы порты 10000-10002. В том, что база создана можно также убедиться, запустив SQL Management Studio

Рис. 14.3.

2. DSService.exe - непосредственно запускает эмулятор облачного хранилища. Запустив его и подождав некоторое время, можно заметить, что в правом нижнем углу появился значок Windows Azure. Для того, чтобы открыть интерфейс эмулятора, нужно щелкнуть правой кнопкой мыши по значку Windows Azure и выбрать "Show Compute Emulator UI". При отсутствии ошибок, должно появиться следующее окно:

Рис. 14.4.

В окне Storage Emulator отображается состояние и конечные точки сервисов эмулятора: Blob, Queue и Table. Сервисы можно запустить, остановить, либо сбросить, с потерей данных, хранящихся в них.

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

Рис. 14.5.

Это скорее всего означает, что указанные порты "слушают" другие приложения. К примеру, как отмечалось в ряде источников и было проверено нами, клиент mtorrent, запущенный до старта эмулятора конфликтует с Blob - сервисом, из-за чего к последнему не удается получить доступ.

Подключение к хранилищу разработки

Для подключения к эмулятору хранилища при разработке приложения (в среде Visual Studio в нашем случае) после создания проекта необходимо перейти к свойствам роли

Рис. 14.6.

А затем во вкладке "Параметры" добавить параметр строки подключения и указать значение "UseDevelopmentStorage=true"

Рис. 14.7.

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

Рис. 14.8.

И в появившемся окне задать параметры подключения и используемой учетной записи Windows Azure.

Рис. 14.9.

Запустив Обозреватель серверов (Меню "Вид" - Обозреватель серверов), увидим появившееся хранилище Windows Azure и хранилище"Разработка" - являющееся отображением эмулятора.

Рис. 14.10.

При помощи обозревателя серверов можно просматривать содержимое конкретных таблиц или контейнеров бинарных объектов.

Рис. 14.11.

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

Рис. 14.12.

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

Задание. Создание хранилища с простой структурой данных.

1. Создадим проект облачной службы. SimpleDataStructure (Меню "Файл" - Создать - Проект). Добавим решению рабочую роль.

Рис. 14.13.

Наше приложение будет подключаться к эмулятору хранилища, создавать таблицу Firm, если ее не существует и добавлять туда одну произвольную запись.

В свойствах рабочей роли определим строку подключения к эмулятору хранилища Azure.

Рис. 14.14.

Нам необходим класс, который будет описывать структуру сущности для нашей таблицы. Класс должен быть наследником Microsoft.WindowsAzure.StorageClient.TableServiceEntity

class Address : TableServiceEntity

{

public String address { get; set; }

public String firm { get; set; }

public String telephone { get; set; }

}

Для создания таблиц необходимо определить класс - контекст, при чем:

класс должен быть наследником TableServiceContext

Для каждой таблицы необходимо определить свойство типа IQueryable, где значение параметра DataItemType - тип сущностей, хранимых в таблице, в нашем случае - Address.

class AddressConext: TableServiceContext

{

public IQueryable<Address> ContactData

{

get

{

return this.CreateQuery<Address>("Address");

}

}

public AddressConext(Uri baseAddress, StorageCredentials credentials) : base(baseAddress.AbsoluteUri, credentials) { }

}

Теперь обратим внимание на методы Run и OnStart. Первый содержит код выполняемый в ходе работы роли, второй - при ее запуске.

Для того, чтобы добавить данные в таблицу нам необходимо в методе Run:

создать экземпляр класса - учетной записи

создать экземпляр класс - контекста

создать экземпляр класса - сущности и задать его параметры

создать таблицу Address, если она не существует

добавить сущность в таблицу

Добавим следующий код:

CloudStorageAccount.SetConfigurationSettingPublisher(

(configName, configSettingPublisher) =>

{

var connectionString =

RoleEnvironment.GetConfigurationSettingValue(configName);

configSettingPublisher(connectionString);

}

);

//определение учетной записи

CloudStorageAccount account = CloudStorageAccount.FromConfiguration Setting("DataConnectionString");

//создание таблицы Windows Azure Table

CloudTableClient _tc = null;

_tc = account.CreateCloudTableClient();

_tc.CreateTableIfNotExist("Address");

/*определение сущности, в том числе свойств ключ строки и ключ секции, унаследованных от родительского TableServiceEntity*/

Address adrs = new Address();

adrs.PartitionKey = "Firm";

adrs.RowKey = "Test entity";

adrs.telephone = "xxx-xx-xx";

adrs.address = "Evergreen Terrace 247";

adrs.firm = "My new firm";

//определение контекста

AddressConext context = new AddressConext(account.TableEndpoint, account.Credentials);

//добавление сущности таблице Address

context.AddObject("Address", adrs);

//сохранение изменений

context.SaveChanges();

Запустите приложение, убедитесь в том, что оно выполнилось без ошибок и остановите его.

В диспетчере серверов, во вкладке "Хранилище Windows Azure" обновите вкладку "Таблицы", вы увидите созданную нашим приложением таблицуAddress.

Рис. 14.15.

Щелкните на таблице правой кнопкой мыши и выберите "Просмотреть данные". Вы увидите, что определенная нами сущность добавлена в таблицу.

Рис. 14.16.

Более подробно работа с Хранилищем Windows Azure будет рассмотрена в последующих практических работах.

В случае, если выполнение задания вызвало сложности и затруднения, в приложениях к данной практической работе вы найдете итоговый программный код.

Приложение WorkerRole1.cs

using System;

using System.Collections.Generic;

using System.Diagnostics;

using System.Linq;

using System.Net;

using System.Threading;

using Microsoft.WindowsAzure;

using Microsoft.WindowsAzure.Diagnostics;

using Microsoft.WindowsAzure.ServiceRuntime;

using Microsoft.WindowsAzure.StorageClient;

using System.Data.Services.Client;

namespace WorkerRole1

{

public class WorkerRole : RoleEntryPoint

{

public override void Run()

{

CloudStorageAccount.SetConfigurationSettingPublisher(

(configName, configSettingPublisher) =>

{

var connectionString =

RoleEnvironment.GetConfigurationSettingValue(configName);

configSettingPublisher(connectionString);

}

CloudStorageAccount account = CloudStorageAccount.FromConfiguration Setting("DataConnectionString");

//создание таблицы Windows Azure Table

CloudTableClient _tc = null;

_tc = account.CreateCloudTableClient();

_tc.DeleteTableIfExist("Address");

_tc.CreateTableIfNotExist("Address");

Address adrs = new Address();

adrs.PartitionKey = "Firm";

adrs.RowKey = "Test entity";

adrs.telephone = "xxx-xx-xx";

adrs.address = "Evergreen Terrace 247";

adrs.firm = "My new firm";

AddressConext context = new AddressConext(account.TableEndpoint, account.Credentials);

context.AddObject("Address", adrs);

context.SaveChanges();

}

public override bool OnStart()

{

ServicePointManager.DefaultConnectionLimit = 12;

return base.OnStart();

}

class Address : TableServiceEntity

{

public String address { get; set; }

public String firm { get; set; }

public String telephone { get; set; }

}

class AddressConext: TableServiceContext

{

public IQueryable<Address> ContactData

{

get

{

return this.CreateQuery<Address>("Address");

}

}

public AddressConext(Uri baseAddress, StorageCredentials credentials) : base(baseAddress.AbsoluteUri, credentials) { }

10. Windows Azure Table - программирование

Базовые операции таблиц и сущностей

создание;

извлечение с применением фильтров;

обновление (только сущности);

удаление;

транзакции над группами сущностей, находящимися в одной таблице и секции;

Таблица интерфейсов программирования приложений, поддерживаемых таблицами и сущностями

Расширенные операции над таблицами и сущностями:

разбиение на страницы;

обработка конфликтов параллельных обновлений.

Контроль версий

Для обеспечения контроля версия для всех решений Windows Azure Storage был введен HTTP-заголовок "x-ms-version". Все изменения APIхранилища регистрируются как версии с помощью этого заголовка. Это обеспечивает возможность выполнять предыдущие версии команд и при этом расширять возможности существующих команд и вводить новые.

Заголовок "x-ms-version" должен задаваться для всех запросов к Windows Azure Storage . При поступлении анонимного запросе без указания версии система хранения выполнит самую старую из поддерживаемых версию этой команды.

Класс сущностей

Схема таблицы описывается как C#-класс. Такую модель использует ADO.NET Data Services . Схема известна только клиентскому приложению и упрощает доступ к данным. Сервер схему не применяет.

Для примера рассмотрим работу с таблицей контактов - Contact .

Рассмотрим описание сущностей Contact , хранящихся в таблице Contacts . Каждая сущность содержит следующие данные:

Группа контактов - Group ;

Имя контакта - NameOf ;

Дату создания контакта - DateOf ;

Адрес электронной почты - Email ;

Комментарии - Comment.

Для данной таблицы "Contacts" в качестве ключа секции используется Group, а в качестве ключа строки - NameOf. PartitionKey и RowKey- ключи таблицы Contacts, они объявляются посредством атрибута класса DataServiceKey (Ключ сервиса данных). Кроме ключей, в качестве свойств объявлены характерные для данного вида сущностей атрибуты. Все свойства имеют открытые ( public ) методы считывания и присвоения значения и хранятся в таблице Windows Azure Table . Итак, в примере ниже:

public class Contacts

{

public string PartitionKey { get; set; }

public string RowKey { get; set; }

public datetime DateOf { get; set; }

public String Email { get; set; }

public String Comments { get; set; }

}

Создание таблиц

Далее рассмотрим, как создать таблицу Contacts для учетной записи хранилища. Создание таблицы аналогично созданию сущности в основной таблице "Tables" . Эта основная таблица определена для каждой учетной записи хранилища, и имя каждой таблицы, используемой учетной записью хранения, должно быть зарегистрировано в основной таблице. Описание класса основной таблицы приведено ниже, где свойство TableName (Имя таблицы) представляет имя создаваемой таблицы.

public class TableStorageTable

{ public string TableName { get; set; }

}

Фактическое создание таблицы происходит следующим образом:

// Uri сервиса: "http://<Account>.table.core.windows.net/"

DataServiceContext context = new DataServiceContext(serviceUri);

TableStorageTable table = new TableStorageTable("Contacts ");

// Создаем новую таблицу, добавляя новую сущность

// в основную таблицу "Tables"

context.AddObject("Tables", table);

// результатом вызова SaveChanges является отклик сервера

DataServiceResponse response = context.SaveChanges();

serviceUri - это uri сервиса таблицы, http://<Здесь указывается имя учетной записи>.table.core.windows.net/. DataServiceContext(Контекст сервиса данных) - один из основных классов сервиса данных ADO.NET , представляющий контекст времени выполнения для сервиса. Он обеспечивает API для вставки, обновления, удаления и запроса сущностей с помощью либо LINQ , либо RESTful URI и сохраняет состояние на стороне клиента. Более подробный пример работы с Windows Azure Table , начиная от создания приложения, будет рассмотрен в рамках соответствующего практического занятия.

11. Особенности создания и работы с реляционным хранилищем данных

Как мы уже говорили в лекциях, хранилище Windows Azure, помимо прочего, подходит для хранения реляционных данных, для этого используются возможности Windows Azure Table. Однако, само по себе, табличное хранилище Windows Azure не хранит данные в реляционном виде. Возникает вопрос, каким образом возможно хранить реляционную структуру и как обеспечить миграцию данных?

Ответов на данные вопросы может быть множество. То как вы решите переносить существующую реляционную структуру данных в облако, зависит целиком от вас самих. Мы продемонстрируем самый простой и очевидный способ - построчное чтение данных из реляционной БД и запись их в таблицу Windows Azure, что и будет целью данной практической работы.

Во-первых, нам понадобится реляционная база данных. В нашей базе будут храниться 3 взаимосвязанные сущности - Адрес, Фирма и Сотрудник.

В данной лабораторной работе мы использовали SQL Management Studio для соединения с базой sqlexpress и выполнения запросов.

Создадим базу данных при помощи запроса 16.1

create database azureexample

Листинг 16.1.

Теперь необходимо создать таблицы, связи между ними и заполнить их тестовым набором данных. Вы можете проделать это самостоятельно, а можно просто выполнить нижеследующий зарос:

use azureexample

create table Address(

AddresID int identity(1,1) primary key,

Country nvarchar(max),

City nvarchar(max),

Street nvarchar(max),

House int

)

create table Firm(

FirmID int identity(1,1) primary key,

NameOf nvarchar(max),

Telephone nvarchar(10),

Email nvarchar(max),

AddressKey int not null

)

create table Employee(

EmployeeID int identity(1,1) primary key,

FirstName nvarchar(max),

LastName nvarchar(max),

Telephone nvarchar(10),

FirmKey int

)

Alter table dbo.Firm add constraint

FK_Firm_Address foreign key

(

AddressKey

) references dbo.Address

(

AddresID

) on update no action

On delete no action

alter table dbo.Employee add constraint

FK_Employee_Firm foreign key

(

FirmKey

)

references dbo.Firm

(

FirmID

)

on update no action

on delete no action

insert into Address

values ('RF', 'Tomsk', 'Evergreen Terrace', '247')

insert into Firm

values ('Firm1', 'xxx-xx-xx', 'firm1@testmail.com', '1')

insert into Firm

values ('Firm2', 'xxx-xx-xx', 'firm2@testmail.com', '1')

insert into Employee

values ('Ivan', 'Ivanov', 'x-xxx-xx','1')

insert into Employee

values ('Victor', 'Romanov', 'x-xxx-xx','1')

insert into Employee

values ('Alex', 'Petrov', 'x-xxx-xx','2')

Таким образом мы получили три таблицы. Диаграмма данных созданной базы представлена ниже:

Рис. 16.1.

Теперь необходимо решить, каким образом данная реляционная структура может быть перенесена в таблицу. Как вам известно из лекции, таблицу Windows Azure можно соотнести с коллекцией взаимосвязанных сущностей, если проводить аналогии с реляционными базами данных. В то время, как строки таблиц Windows Azure, по сути являются экземплярами конкретных сущностей.

Мы предлагаем следующее очевидное решение:

Создать Windows Azure таблицу "Relational", которая будет содержать в себе сущности Address, Firm и Employee

Ключ секции будет указывать на соответствие строки таблицы Azure экземпляру сущности реляционной БД, т.е. для всех сотрудниковключ секции будет - "Employee"

Значения атрибутов - ключей в реляционных таблицах будут являться значениями RowKey для таблицы "Relational", такими образом пара ключ секции - ключ строки будет являться уникальным идентификатором однозначно указывающим на принадлежность Azure - строки конкретной сущности исходной БД и определяющим экземпляр сущности

Значения остальных атрибутов будут перенесены без изменений.

Мы не видим необходимости в создании нового VS - проекта, поэтому просто изменим WorkerRole.cs проекта, созданного в рамках предыдущей практической работы. А именно, метод Run, чей листинг представлен ниже:

CloudStorageAccount.SetConfigurationSettingPublisher(

(configName, configSettingPublisher) =>

{

var connectionString =

RoleEnvironment.GetConfigurationSettingValue(configName);

configSettingPublisher(connectionString);

}

);

CloudStorageAccount account = CloudStorageAccount.FromConfiguration Setting("DataConnectionString");

//создание таблицы Windows Azure Table

CloudTableClient _tc = null;

_tc = account.CreateCloudTableClient();

_tc.CreateTableIfNotExist("Relational");

Context context = new Context(account.TableEndpoint, account. Credentials);

//определение параметров подключения к БД, измените строку подключения

//соответствующим образом, для соединения с вашим sql - сервером

SqlConnection conn = new SqlConnection("Data Source=saigon\\ sqlexpress;

Initial Catalog=azureexample; Integrated Security=true;");

//импорт данных из таблицы Address

//указываем команду для чтения данных из базы

SqlCommand cmd = new SqlCommand("SELECT * FROM Address", conn);

conn.Open();

SqlDataReader adr = cmd.ExecuteReader();

while (adr.Read())

{

//в параметрах метода AddObject указывает имя таблицы и определяем новую сущность класс //Address

context.AddObject("Relational", new Address

{

PartitionKey = "Address",

RowKey = adr["AddresID"].ToString(),

country = adr["Country"].ToString(),

city = adr["City"].ToString(),

street = adr["Street"].ToString(),

house = Convert.ToInt32(adr["House"].ToString())

});

context.SaveChanges();

}

adr.Close();

//импорт данных из таблицы Firm

cmd.CommandText = "SELECT * FROM Firm";

SqlDataReader frm = cmd.ExecuteReader();

while (frm.Read())

{

context.AddObject("Relational", new Firm

{

PartitionKey = "Firm",

RowKey = frm["FirmID"].ToString(),

nameof = frm["NameOf"].ToString(),

telephone = frm["Telephone"].ToString(),

email = frm["Email"].ToString(),

adresskey = Convert.ToInt32(frm["AddressKey"].ToString())

});

context.SaveChanges();

}

frm.Close();

//импорт данных из таблицы Employee

cmd.CommandText = "SELECT * FROM Employee";

SqlDataReader emp = cmd.ExecuteReader();

while (emp.Read())

{

context.AddObject("Relational", new Employee

{

PartitionKey = "Employee",

RowKey = emp["EmployeeID"].ToString(),

firstname = emp["FirstName"].ToString(),

lastname = emp["LastName"].ToString(),

telephone = emp["Telephone"].ToString(),

firmkey = Convert.ToInt32(emp["FirmKey"].ToString())

});

context.SaveChanges();

}

emp.Close();

conn.Close();

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

Класс Address.cs

class Address: TableServiceEntity

{

public String country { get; set; }

public String city { get; set; }

public String street { get; set; }

public int house { get; set; }

}

Класс Firm.cs

class Firm: TableServiceEntity

{

public String nameof { get; set; }

public String telephone { get; set; }

public String email { get; set; }

public int adresskey { get; set; }

}

Класс Employee.cs

class Employee: TableServiceEntity

{

public String firstname { get; set; }

public String lastname { get; set; }

public String telephone { get; set;}

public int firmkey { get; set; }

}

Класс Context.cs

class Context: TableServiceContext

{

public IQueryable<Address> ContactData

{

get

{

return this.CreateQuery<Address>("Address");

}

}

public Context(Uri baseAddress, StorageCredentials credentials) :

base(baseAddress.AbsoluteUri, credentials) { }

Запустите приложение и дождитесь конца его выполнения. В обозревателе серверов раскройте вкладку "Хранилище Windows Azure", затем обновите вкладку "Таблицы" и раскройте ее. Как вы можете видеть, появилась таблица "Relational".

Рис. 16.2.

Если вы решите ее просмотреть, то увидите, что данные из реляционной БД успешно перенесены в таблицу.

Рис. 16.3.

12. Работа с Windows Azure Table

В качестве примера рассмотрим простое приложение - справочник контактов, с поддержкой функции добавления, изменения и удаления.

Прежде всего создадим проект "AzureTableExample", необходимый для данной лабораторной работы.

Для демонстраци возможностей приложения, использующего в качестве хранилища данных WindowsAzure Table нам понадобится только веб - роль, добавьте ее решению. В свойствах веб - роли определим строку подключения к эмулятору хранилища Azure.

Рис. 17.1.

Рис. 17.2.

Создание классов будущего приложения

Класс - Контакт.

Добавим следующие ссылки:

using Microsoft.WindowsAzure.StorageClient;

Контакт будет содержать следующую информацию:

Имя

Фамилию

Контактный телефон

Адрес электронной почты

Добавим C# класс нашей рабочей роли - Contact.cs и зададим необходимые свойства, унаследовав его отMicrosoft.WindowsAzure.Storage Client.TableServiceEntity :

class Contact : Microsoft.WindowsAzure.StorageClient.TableServiceEntity

Определим требуемые свойства для класса контактов. И в конечном итоге, наш класс будет выглядеть следующим образом:

class Contact : Microsoft.WindowsAzure.StorageClient.TableServiceEntity

public String FirstName { get; set; }

public String LastName { get; set; }

public String TelNumber { get; set; }

public String Email { get; set; }

Класс - контекст для доступа ContactContext.cs

Нам понадобятся следующие ссылки:

using Microsoft.WindowsAzure;

using Microsoft.WindowsAzure.StorageClient;

using System.Data.Services.Client;

Создадим соответствующий C# - класс, унаследуем его от TableServiceContext и определим конструктор:

class ContactContext : TableServiceContext

{

public ContactContext (Uri baseAddress, StorageCredentials credentials): base(baseAddress.AbsoluteUri, credentials) {}

}

Добавим свойство для возвращения data service - запроса для таблицы Contacts.

public IQueryable<Contact> ContactData

{

get

{

return this.CreateQuery<Contact>("Contacts");

}

}

Последним шагом по созданию класса - контекста является создание метода для добавления строки в таблицу. В итоге, класс должен выглядеть следующим образом 5.1:

class ContactContext : TableServiceContext

{

public IQueryable<Contact> ContactData

{

get

{

return this.CreateQuery<Contact>("Contacts");

public ContactContext (Uri baseAddress, StorageCredentials credentials): base(baseAddress.AbsoluteUri, credentials) {}

public void Add(Contact cntct)

{

this.AddObject("Contacts", cntct);

this.SaveChanges();

Интерфейc

Создадим веб - форму для работы с нашим контакт - листом.

Внешний вид веб формы

Рис. 17.3.

Добавление данных в таблицу

В обозревателе решений найдите файл Global.asax.cs. В метод Application_Start необходимо добавить код создания таблицы, в случае если она не была создана до этого:

void Application_Start(object sender, EventArgs e)

{

CloudStorageAccount.SetConfigurationSettingPublisher(

(configName, configSettingPublisher) =>

{

var connectionString =

RoleEnvironment.GetConfigurationSettingValue(configName);

configSettingPublisher(connectionString);

}

);

var account = CloudStorageAccount.FromConfiguration Setting("DataConnectionString");

//создание таблицы Windows Azure Table

CloudTableClient _tc = null;

_tc = account.CreateCloudTableClient();

_tc.CreateTableIfNotExist("Contacts");

}

Далее в обработчике события нажатия кнопки "AddContact" необходимо создать аккаунт для подключения к хранилищу, используя параметрстроки подключения "DataConnection String" . После этого, для непосредственного добавления данных в таблицу нам понадобится экземпляр класса - контекса. Вызвав метод "Add" данного класса (листинг 17.1) мы добавим строку в таблицу, передав в качестве параметра экземпляр класса "Contact" .

Обратите внимание, в классе Contact мы не описывали необходимые параметры для добавления строки в таблицу (ключ секции и ключ строки), класс унаследовал их от родителя. В качестве значения ключа секции зададим произвольную строку, в качестве ключа строки будем использовать сочетание "Last Name + First Name" .

protected void btn_add_Click(object sender, EventArgs e)

{

var statusMessage = String.Empty;

try

{

var account = CloudStorageAccount.FromConfigurationSetting ("DataConnectionString");

var context = new ContactContext(account.TableEndpoint, account.Credentials);

context.Add(new Contact { PartitionKey = "MyContacts",

RowKey = this.tb_lastname.Text + " " + this.tb_firstname.Text,

FirstName = tb_firstname.Text, LastName = tb_lastname.Text,

TelNumber = tb_telnum.Text, Email = tb_email.Text });

}

catch (DataServiceRequestException ex)

{

statusMessage = "Unable to connect to the table storage server. Please check that the service is running.<br>"

+ ex.Message;

}

lb_status.Text = statusMessage;

}

Запустив отладку приложения, введем необходимые данные в появившуюся веб - форму и нажмем кнопку "Add Contact".

asp - код веб - формы данной задачи:

<%@ Page Language="C#"

AutoEventWireup="true" CodeBehind="AzureTable.aspx.cs" Inherits="WebRole1.AzureTable" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title></title>

<style type="text/css">

.style1

{

width: 169px;

}

</style>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:Label ID="NameOfExample" runat="server" Font-Bold="True"

Font-Italic="False" Font-Size="Larger" Font-Strikeout="False"

Font-Underline="False" Text="My Contact List - Windows Azure Table Example"></asp:Label>

<br />

<br />

<asp:Label ID="ContactLabel" runat="server" Text="Contact:"></asp:Label>

<br />

<table style="width:100%;">

<tr>

<td class="style1">

</td>

<td>

</td>

</tr>

<tr>

<td class="style1">

<asp:Label ID="lb_firstname" runat="server" Text="First Name"></asp:Label>

</td>

<td>

<asp:TextBox ID="tb_firstname" runat="server"></asp:TextBox>

</td>

</tr>

<tr>

<td class="style1">

<asp:Label ID="lb_lastname" runat="server" Text="Last Name"></asp:Label>

</td>

<td>

<asp:TextBox ID="tb_lastname" runat="server"></asp:TextBox>

</td>

</tr>

<tr>

<td class="style1">

<asp:Label ID="lb_telnum" runat="server" Text="Telephone Number"></asp:Label>

</td>

<td>

<asp:TextBox ID="tb_telnum" runat="server"></asp:TextBox>

</td>

</tr>

<tr>

<td class="style1">

<asp:Label ID="lb_email" runat="server" Text="E-mail"></asp:Label>

</td>

<td>

<asp:TextBox ID="tb_email" runat="server"></asp:TextBox>

</td>

</tr>

<tr>

<td class="style1">

</td>

<td>

</td>

</tr>

<tr>

<td class="style1">

</td>

<td>

<asp:Button ID="btn_add" runat="server" Height="20px" Text="Add Contact" />

</td>

</tr>

<tr>

<td class="style1">

<asp:Label ID="lb_status" runat="server"></asp:Label>

</td>

<td>

</td>

</tr>

</table>

</div>

</form>

</body>

</html>

13. Работа с Windows Azure Table

Просмотр данных

Форма создана. Классы сформированы. Осталось понять добавилось ли что-либо в наше хранилище. Открыв обозреватель серверов и раскрыв последовательно вкладки "Хранилище Windows Azure", "Разработка" и "Таблицы", мы увидем созданную таблицу "Contacts".

Рис. 17.4.

Щелкнув правой кнопкой мыши на нашей таблице и выбрав "Просмотреть таблицу", получив следующее:

Рис. 17.5.


Подобные документы

  • Облачные технологии в бизнес-процессах. Модели использования бизнес-приложений в качестве интернет-сервисов. Практика применения облачных технологий. Приложения, созданные на основе Windows Azure. Создание систем и офисных приложений по запросу.

    реферат [25,3 K], добавлен 16.06.2013

  • Модели развертывания и облачные модели. Анализ существующих методов информационной безопасности. Обеспечение надежного шифрования данных при передаче их от пользователя к провайдеру услуг по хранению данных. Минимизация нагрузки на облачные сервисы.

    дипломная работа [839,1 K], добавлен 17.09.2013

  • Проектирование системы принятия решения для аттестации знаний абитуриента на основе тестирования. Особенности создания базы данных и плана перевозок с минимизацией затрат. Разработка информационно-логической модели предметной области "Книга" с атрибутами.

    курсовая работа [7,9 M], добавлен 10.10.2012

  • Теоретическая основа линейного программирования. Задачи линейного программирования, методы решения. Анализ оптимального решения. Решение одноиндексной задачи линейного программирования. Постановка задачи и ввод данных. Построение модели и этапы решения.

    курсовая работа [132,0 K], добавлен 09.12.2008

  • Ознакомление с разнообразными надстройками, входящими в состав Microsoft Excel; особенности их использования. Примеры решения задач линейного программирования с помощью вспомогательных программ "Подбор параметра", "Поиск решения" и "Анализ данных".

    реферат [2,5 M], добавлен 25.04.2013

  • Обзор моделей анализа и синтеза модульных систем обработки данных. Модели и методы решения задач дискретного программирования при проектировании. Декомпозиция прикладных задач и документов систем обработки данных на этапе технического проектирования.

    диссертация [423,1 K], добавлен 07.12.2010

  • Методы построения хранилища данных на основе информационной системы реального коммерческого предприятия. Основные аналитические задачи, для решения которых планируется внедрение хранилищ данных. Загрузка процессоров на серверах. Схемы хранения данных.

    контрольная работа [401,0 K], добавлен 31.05.2013

  • Предпосылки появления облачных технологий. Сущность понятия "облачное хранилище данных", главные преимущества и недостатки. Главное достоинство Google. SugarSync: понятие, синхронизация любых папок на диске. Сравнительный анализ общедоступных сервисов.

    курсовая работа [250,8 K], добавлен 31.03.2014

  • Технологии распределённой обработки данных, в которой компьютерные ресурсы и мощности предоставляются пользователю как Интернет-сервис. Виды облаков, достоинства и недостатки "облачных" вычислений. Компании, которые предоставляют "облачные" сервисы.

    контрольная работа [28,1 K], добавлен 10.03.2012

  • Сведения о платформе Microsoft.NET Framework, способы и методы доступа к базам данных и системам управления базами данных, особенности проектирования и программирования баз данных средствами выше упомянутой платформы. Спроектировано приложение "Articles".

    курсовая работа [5,9 M], добавлен 20.03.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.