Microsoft Windows Azure

Работа с блобами, таблицами и очередями Windows Azure Storage в локальном эмуляторе

Показывать лекцию целиком

Создайте новый облачный проект (Cloud Service) в Visual Studio 2012.

(рис 9.1) Создание нового Cloud Service

Добавьте в проект одну Web-роль.

(рис 9.2) Добавление Web-роли

Добавьте функциональность работы с блобами. Добавьте в файл Default.aspx.cs в определение класса _Default следующий код:

    CloudStorageAccount _cloudStorageAccount;
        CloudBlobClient _blobClient;
        CloudBlobContainer _blobContainer;
        BlobContainerPermissions _permissions;
        CloudBlockBlob _blob;Добавьте в метод Page_Load код, приведенный ниже.
_cloudStorageAccount = CloudStorageAccount.DevelopmentStorageAccount;
            _blobClient = _cloudStorageAccount.CreateCloudBlobClient();
            _blobContainer = _blobClient.GetContainerReference("mycontainer");
            _blobContainer.CreateIfNotExists();
            _permissions = new BlobContainerPermissions();
            _permissions.PublicAccess = BlobContainerPublicAccessType.Blob;
            _blobContainer.SetPermissions(_permissions);
            _blob = _blobContainer.GetBlockBlobReference("image.jpg");
            using (var fileStream = System.IO.File.OpenRead(@"c:\temp\image.jpg"))
            {
                _blob.UploadFromStream(fileStream);
            }          
            Response.Write("<img style='width:20%;height:20%;' src='"+_blob.Uri+"'></img>");
            Response.Write("<br />");
            Response.Write("Файл загружен по адресу " + _blob.Uri);

Нажмите F5 для запуска приложения в локальном эмуляторе вычислений.

(рис 9.3) Интерфейс запущенного Cloud Service

Доступ к файлу может быть получен в браузере. Также доступ к хранилищу может быть произведен из Visual Studio Server Explorer.

(рис 9.4) Интерфейс редактирования Visual Studio 2012

Добавьте в приложение поддержку таблиц Windows Azure Storage. Для этого добавьте в приложение класс с названием ImageEntity. Сущности данного класса будут работать как отображающие объектную модель в хранилище Windows Azure Storage.

Добавьте в класс ImageEntity код, приведенный ниже.

public ImageEntity(string name, long size)
        {
            this.PartitionKey = "1";
            this.RowKey = DateTime.Now.ToString();
            this.Name = name;
            this.Size = size;
        }

        public ImageEntity() { }

        public string Name { get; set; }

        public long Size { get; set; }

Добавьте в метод Page_Load файла Default.aspx.cs код, приведенный ниже.

CloudTableClient _tableClient = _cloudStorageAccount.CreateCloudTableClient();

            CloudTable _table = _tableClient.GetTableReference("images");
            _table.CreateIfNotExists();
          
            _blob.FetchAttributes();
            ImageEntity image = new ImageEntity(_blob.Name, _blob.Properties.Length);

            TableOperation insertOperation = TableOperation.Insert(image);

            _table.Execute(insertOperation);

            TableQuery<ImageEntity> query = new TableQuery<ImageEntity>().Where
(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "1"));

            Response.Write("<br />");
            foreach (ImageEntity entity in _table.ExecuteQuery(query))
            {
                Response.Write(String.Format("Сущность, добавленная {0}, имеет имя {1} и размер {2} <br />",
 entity.RowKey, entity.Name, entity.Size)
                    );
            }

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

Нажмите F5 для запуска приложения в локальном эмуляторе вычислений. Обновите несколько раз страницу.

Доступ к файлу может быть получен в браузере. Также доступ к таблице может быть произведен из Visual Studio Server Explorer.

(рис 9.5) Просмотр содержимого таблицы в Visual Studio 2012

Добавьте в приложение поддержку очередей Windows Azure Storage. Для этого добавьте код, приведенный ниже, в метод Page_Load.

CloudQueueClient _queueClient = _cloudStorageAccount.CreateCloudQueueClient();
            CloudQueue _queue = _queueClient.GetQueueReference("myqueue");
            _queue.CreateIfNotExists();
            Response.Write("Сообщение добавляется в очередь "+_queue.Name +"<br />");
           CloudQueueMessage message = new CloudQueueMessage(_blob.Uri.ToString());
            _queue.AddMessage(message);
            Response.Write("Сообщение было добавлено<br />");
            CloudQueueMessage retrievedMessage = _queue.GetMessage();
            Response.Write("Получение первого сообщение из очереди<br />");
            _queue.DeleteMessage(retrievedMessage);
            Response.Write("Полученное сообщение:" +retrievedMessage.AsString + 
" с идентификатором:"+retrievedMessage.Id +" было добавлено в очередь:" +retrievedMessage.InsertionTime);

Нажмите F5 для запуска приложения в локальном эмуляторе вычислений.

(рис 9.6) Интерфейс развернутого Cloud Service

Доступ к файлу может быть получен в браузере. Также доступ к сущностям, хранящимся в очереди Windows Azure Storage, может быть произведен из Visual Studio Server Explorer.

(рис 9.7) Доступ к сущностям, хранящимся в очереди Windows Azure Storage из Visual Studio Server Explorer

Лабораторная работа №2: использование Windows Azure SQL Databases в SQL Server Management Studio

SQL Server Management Studio – удобное средство для взаимодействия с источником данных SQL Server. Поддержка управления Windows Azure SQL Databases была внедрена в SQL Server Management Studio версии 2008.

Создайте базу данных на портале управления Windows Azure.

Нажмите NEW | DATA SERVICES | SQL DATABASE | QUICK CREATE.

Введите имя базы данных, выберите вариант New SQL database server для создания нового сервера, и введите логин и пароль для администраторского аккаунта.

(рис 9.8) Создание новой базы данных в Windows Azure SQL Databases

Перейдите на вкладку SQL Databases и нажмите на имени созданного сервера. Нажмите кнопку MANAGE.

(рис 9.9) Администрирование баз данных в панели Windows Azure

После появления вопроса о том, внести ли ваш IP-адрес в список разрешенных, нажмите YES.

Далее портал сообщит о том, что IP-адрес был добавлен в список разрешенных, и спросит, необходимо ли перейти к порталу администрирования сервера. Нажмите NO.

(рис 9.10) Разрешение добавления нового IP-адреса

Нажмите на имени сервера, чтобы перейти на его панель управления. Скопируйте с вкладки Dashboard полное имя сервера. Также на Dashboard можно выполнить другие операции, например, по управлению брандмауэром.

Скопировав полное имя сервера, запустите SQL Server Management Studio. После запуска введите полное имя сервиса в строку адреса и, выбрав SQL Server Authentification ("Проверка подлинности SQL Server"), введите логин и пароль администратора. Нажмите Соединить.

(рис 9.11) Соединение с базой данных с помощью SQL Server Management Studio

После загрузки SQL Server Management Studio раскройте папку Базы данных | Системные базы данных. Выберите базу данных master и нажмите Создать запрос. Введите в появившееся окно запрос CREATE DATABASE intuitdb (MAXSIZE=1GB, EDITION='web'); и нажмите F5 для его выполнения (создания новой базы данных на сервере в редакции Web и размером 1 ГБ).

(рис 9.12) Создание новой базы данных

Нажмите правой кнопкой мыши на директории Базы данных и нажмите Обновить. Если все прошло успешно, то вы увидите в списке баз данных новую запись.

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

ALTER DATABASE intuitdb MODIFY (MAXSIZE=50GB, EDITION='business');

Информацию о всех базах данных на сервере можно увидеть, выполнив следующий запрос:

SELECT * FROM sys.databases;
(рис 9.13) Информация о всех базах данных на сервере

Как вы увидели, выполнив эту лабораторную работу, использование SQL Server Management Studio для Windows Azure SQL Databases ничем не отличается от использования для обычных локальных экземпляров SQL Server.

Лабораторная работа №3: использование Windows Azure SQL Databases в приложении Cloud Services с использованием Entity Framework

Выполните запрос, приведенный ниже, для таблицы intuitdb, созданной в предыдущей лабораторной работе.

CREATE TABLE [dbo].[image](
  [id] [uniqueidentifier] NOT NULL PRIMARY KEY,
  [name] [nvarchar](250) NOT NULL,
  [size] [bigint] NULL
) ON [PRIMARY]

Добавьте контекст базы данных в приложение, созданное в первой лабораторной работе.

Нажмите правой кнопкой мыши на имени проекта. Нажмите Add | New Item.

(рис 9.14) Создание нового элемента проекта

Выберите тип добавляемой сущности ADO.NET Entity Data Model. Нажмите Add.

(рис 9.15) Создание ADO.NET Entity Data Model

В открывшемся диалоговом окне выберите Generate from database.

(рис 9.16) Выбор способа создания модели

На странице Choose your data connection нажмите New Connection.

(рис 9.17) Создание нового подключения

В открывшемся диалоговом окне вставьте полное имя сервера, которое можно скопировать с панели управления сервером на портале управления Windows Azure, выберите режим аутентификации SQL Server Authentification. Введите логин и пароль администратора, после чего в выпадающем меню Select or enter a database name выберите базу данных intuitdb. Нажмите OK.

(рис 9.18) Установка параметров подключения

На странице Choose your Database Object and Settings отметьте таблицу images. Нажмите Finish. Таким образом будет сгенерирована модель данных и контекста Entity Framework для взаимодействия с облачным сервером Windows Azure SQL Databases.

После создания всех необходимых файлов и моделей перейдите в файл Default.aspx.cs.

Добавьте в метод Page_Load код, приведенный ниже. Обратите внимание, что этот код зависит от выполнения лабораторной работы №1.

using (intuitdbEntities ctx = new intuitdbEntities())
            {
                ctx.image.Add(new image()
                                  {
                                      id = Guid.NewGuid(),
                                      name = _blob.Name,
                                      size = _blob.Properties.Length
                                  });
                ctx.SaveChanges();

                var imgs = from b in ctx.image select b;
                Response.Write("В базе содержится "+imgs.Count() + "элементов:<br />");
                foreach (var img in imgs)
                {
                    Response.Write(img.id + " | " + img.name + " | " + img.size + "<br />");
                }

            }

Нажмите F5 для запуска приложения в эмуляторе вычислений.

Вернуться к учебному плану