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



Дата16.12.2016
Размер0.49 Mb.
Просмотров278
Скачиваний0
ТипЛабораторная работа
Лабораторная работа 3.

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



Цель работы: Настройка строки подключения к хранилищу разработки, запуск хранилища разработки, обозреватель хранилищ Windows Azure. Создание хранилища данных с простой структурой данных (simple data structure).

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

http://www.intuit.ru/edi/16_08_14_2/1408137470-25747/tutorial/992/objects/14/files/3_1sm.jpg

Рис. 1. Установка Storage Emulator по умолчанию

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

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

http://www.intuit.ru/edi/16_08_14_2/1408137470-25747/tutorial/992/objects/14/files/3_2.jpg

Рис. 2. Инициализация локального хранилища и прав доступа к нему

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

http://www.intuit.ru/edi/16_08_14_2/1408137470-25747/tutorial/992/objects/14/files/3_3.jpg


Рис. 3. Обозреватель объектов

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

http://www.intuit.ru/edi/16_08_14_2/1408137470-25747/tutorial/992/objects/14/files/3_4.jpg


Рис. 4. Окно Storage Emulator 

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

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

http://www.intuit.ru/edi/16_08_14_2/1408137470-25747/tutorial/992/objects/14/files/3_5.jpg

Рис. 5. Окно, демонстрирующее ошибку при запуске хранилища разработки

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

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

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

http://www.intuit.ru/edi/16_08_14_2/1408137470-25747/tutorial/992/objects/14/files/3_6.jpg


Рис. 6. Свойства роли

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

http://www.intuit.ru/edi/16_08_14_2/1408137470-25747/tutorial/992/objects/14/files/3_7.jpg


Рис. 7. Добавление параметра

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

http://www.intuit.ru/edi/16_08_14_2/1408137470-25747/tutorial/992/objects/14/files/3_8sm.jpg


Рис. 8. Выбор параметров

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

http://www.intuit.ru/edi/16_08_14_2/1408137470-25747/tutorial/992/objects/14/files/3_9.jpg


Рис. 9. Подключение к учетной записи хранилища

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

http://www.intuit.ru/edi/16_08_14_2/1408137470-25747/tutorial/992/objects/14/files/3_10.png


Рис. 10. Окно Обозревателя серверов

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

http://www.intuit.ru/edi/16_08_14_2/1408137470-25747/tutorial/992/objects/14/files/3_11.jpg


Рис. 11. Просмотр контейнеров

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

http://www.intuit.ru/edi/16_08_14_2/1408137470-25747/tutorial/992/objects/14/files/3_12.jpg

Рис. 12. Добавление новой учетной записи хранилища

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

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

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

http://www.intuit.ru/edi/16_08_14_2/1408137470-25747/tutorial/992/objects/14/files/3_13.jpg

Рис. 13. Создание проекта облачной службы

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

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

http://www.intuit.ru/edi/16_08_14_2/1408137470-25747/tutorial/992/objects/14/files/3_14sm.jpg

Рис. 14. Подключение к эмулятору хранилища Azure

Нам необходим класс, который будет описывать структуру сущности для нашей таблицы. Класс должен быть наследником 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

ContactData



{

get


{

return this.CreateQuery

("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.FromConfigurationSetting("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.

http://www.intuit.ru/edi/16_08_14_2/1408137470-25747/tutorial/992/objects/14/files/3_15.jpg

Рис. 15. Таблица Address, созданная приложением

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

http://www.intuit.ru/edi/16_08_14_2/1408137470-25747/tutorial/992/objects/14/files/3_16.jpg


Рис. 16. Просмотр добавленной в таблицу сущности

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

В приложении к данной лабораторной работе вы найдете итоговый программный код.



Список вспомогательных материалов

  1. http://www.michaelfcollins3.me/2010/07/creating-table-storage-entities-for-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.FromConfigurationSetting("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

ContactData

{

get


{

return this.CreateQuery

("Address");



}

}

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



}

}

}


Поделитесь с Вашими друзьями:


База данных защищена авторским правом ©nethash.ru 2017
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал