Рассмотрим более подробно работу с 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:
Добавим следующий код:
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.
(рис 14.15)
Щелкните на таблице правой кнопкой мыши и выберите "Просмотреть данные". Вы увидите, что определенная нами сущность добавлена в таблицу.
(рис 14.16)
Более подробно работа с Хранилищем Windows Azure будет рассмотрена в последующих практических работах.
В случае, если выполнение задания вызвало сложности и затруднения, в приложениях к данной практической работе вы найдете итоговый программный код.
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<Address> ContactData
{
get
{
return this.CreateQuery<Address>("Address");
}
}
public AddressConext(Uri baseAddress, StorageCredentials credentials) : base(baseAddress.AbsoluteUri, credentials) { }
}
}
}
Рассмотрим более подробно работу с 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:
Добавим следующий код:
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.
(рис 14.15)
Щелкните на таблице правой кнопкой мыши и выберите "Просмотреть данные". Вы увидите, что определенная нами сущность добавлена в таблицу.
(рис 14.16)
Более подробно работа с Хранилищем Windows Azure будет рассмотрена в последующих практических работах.
В случае, если выполнение задания вызвало сложности и затруднения, в приложениях к данной практической работе вы найдете итоговый программный код.
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<Address> ContactData
{
get
{
return this.CreateQuery<Address>("Address");
}
}
public AddressConext(Uri baseAddress, StorageCredentials credentials) : base(baseAddress.AbsoluteUri, credentials) { }
}
}
}
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.