В начале июня 2013 на конференции TechEd (Северная Америка) член технического совета Microsoft и ведущий специалист компании по разработке направления ALM Брайан Харри анонсировал Visual Studio 2013 и Team Foundation Server 2013 совместно с .Net Framework 4.5.1. Несколько недель спустя на конференции Build 2013 в Сан-Франциско было объявлено о доступности предварительных версий этих продуктов. Помимо многочисленных улучшений среды разработки, возможностей создания приложений для любых устройств на базе Windows, в том числе в системе Windows 8.1, веб-приложений и служб для локальных и облачных сред с использованием новых дополнений к Visual Studio и ASP.NET, которые упрощают веб-разработку для различных браузеров и устройств, гибкого управления портфелями проектов, взаимодействия в режиме реального времени, а также упрощения доступа к нужной информации прямо из редактора кода, Visual Studio 2013 является законченным инструментом для разработки, диагностики и отладки приложений в Облаке.
Данная статья является первой в цикле, который позволит начинающим разработчикам получить представление о создании с нуля приложений для WindowsAzureи их развертывании при помощи Visual Studio 2013 Preview, тестировании и управлении в облачных средах. Для работы нам потребуется, собственно, Visual Studio 2013 Preview и подписка на WindowsAzure. Установить бесплатно предварительную версию Visual Studio 2013 Preview можно с центра загрузки Microsoft. Там доступно несколько редакций, нам потребуется редакция Ultimate. После установки можно видеть шаблон проекта для создания приложений в Облаке.
Рис.1
Изначально этот шаблон пустой. Он требует установки WindowsAzureSDK2.1для VS2013, который также может работать с VS2012 и 2010 SP1. При открытии нового проекта этого типа установка начнется автоматически. Как и другие дополнительные инструменты, как, например, SQLServerDataTools, по умолчанию установка происходит через WebPlatformInstaller. Логично предположить, что машина разработчика, на которой будет происходить создание облачных приложений, имеет выход в Интернет. Однако известны ситуации, когда разработка и тестирование производится локально, а размещение в Облаке осуществляется с нескольких выделенных машин в подразделении. В этом случае на локальную машину следует установить Windows Azure SDK «вручную» в соответствии с инструкцией (см.раздел InstallInstructions). Системные пререквизиты указаны там же в разделе SystemRequirements. Скачать по отдельности WindowsAzureAuthoringTools-x64.msi, WindowsAzureEmulator-x64.exe, WindowsAzureTools.vs120.exeи другие компоненты можно здесь.
После установки Windows Azure SDK надпись Get Windows Azure SDK в шаблоне проекта (Рис.1) сменяется на WindowsAzureCloudService. В создаваемое приложение добавим ASP.NETвеб-роль:
Рис.2
а в нее – веб-форму по умолчанию:
Рис.3
Для рассмотрения дальнейшего процесса локального тестирования приложения и его размещения в Облаке нужно создать простейший пользовательский код, который можно позаимствовать, например, здесь:
Рис.4
По умолчанию запуск осуществляется в локальном эмуляторе WindowsAzure, установленном в составе WindowsAzureSDK. Если в системе включен User Access Control, будет выдано сообщение
Рис.5
Чтобы запустить VisualStudioс административными привилегиями, зайдите в каталог, где она установлена. В Windows 8 найдите на стартовом экране иконку VisualStudio, щелкните по ней правой кнопкой и в нижней строке меню выберите Runasadministrator.
Рис.6
Либо кликните по пункту меню Openfilelocation, в обозревателе войдите в свойства ярлыка VisualStudio 2013 Preview, нажмите на кнопку Advancedи отметьте галку Runasadministrator:
Рис.7
Перезапустите VisualStudio, откройте снова ранее созданное приложение и стартуйте его.
Рис.8
Кликните на кнопку Button. В обработчике события нажатия на эту кнопку сработает ранее добавленное туда создание блоба в AzureStorageи строка кода для отладки
var storageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"));
var blobClient = storageAccount.CreateCloudBlobClient();
var blobContainer = blobClient.GetContainerReference("testblob");
blobContainer.CreateIfNotExists();
var blob = blobContainer.GetBlockBlobReference(Guid.NewGuid().ToString());
blob.UploadFromStream(newMemoryStream(Encoding.UTF8.GetBytes("Hello Windows Azure")));
System.Diagnostics.Trace.WriteLine("Added blob to Windows Azure Storage");
Скрипт 1
В окне Outputмы увидим соответствующую ��адпись.
Кроме того в целях тестирования наша процедура Button1_Clickсодержит настройку монитора диагностики для передачи в другой блоб журналов с определенной периодичностью, в данном случае – каждые полминуты.
DiagnosticMonitorConfiguration diag = DiagnosticMonitor.GetDefaultInitialConfiguration();
diag.Logs.ScheduledTransferPeriod = TimeSpan.FromSeconds(30);
DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", diag);
Скрипт 2
Остановим приложение из VSили закрыв окно браузера. Откройте ServerExplorer. Обратите внимание, что эмулятор WindowsAzureсодержит два блобовских контейнера в разделе Storage\Blobs. Первый – это созданный нами testblob (Скрипт 1). Второй – wad-control-container– контейнер, который создался для записи журналов при помощи монитора диагностики (Скрипт 2).
Рис.9
Дважды кликнув по контейнеру testblob, можно видеть, что он содержит блобы с именами гуидов, созданные (Скрипт 1) всякий раз при запуске приложения и нажатию кнопки Buttonна веб-странице (Рис.8).
Рис.10
Двойной клик по каждой из строчек открывает содержимое соответствующего блоба в окне, допустим, IE. Там лежит трассировочная строка HelloWindowsAzure.
Второй контейнер содержит журналы WindowsAzure, собранные при помощи монитора диагностики:
Рис.11
Каждый блоб также можно открыть в браузере и прочитать сохраненный в тот или иной момент времени журнал:
Рис.12
Убедившись в работоспособности приложения, перейдем к его размещению и запуске в Облаке. Предварительно для запуска веб-ролей в среде Windows Azure.понадобится создать облачную службу, для чего заходим на портал управления Windows Azure, нажимаем значок + в левом нижнем углу и в появившемся меню выбираем CloudService. Опция CustomCreateпозволяет сразу же опубликовать облачную службу, указав файл конфигурации (CSCFG), пакет (CSPKG) и сертификат. Поскольку мы собираемся публиковать приложение из проекта VisualStudio, нам будет достаточно опции QuickCreate. В этом случае нужно только придумать название службы и задать датацентр, в котором она будет работать. Датацентр, как правило, выбирается из соображений минимизации стоимости трафика, который в пределах одного и того же датацентра бесплатный. Например, если наше приложение будет работать с базой данных SQLAzure, созданной в датацентре NorthEurope, то и службу имеет смысл размещать там же.
Рис.13
Наше приложение использует учетную запись хранения, которая до этого эмулировалась средствами WindowsAzureTools, установленными локально. Теперь ее потребуется создать в Облаке:
Рис.14
Остается перенастроить проект в VisualStudiocэмулятора на использование «честных» облачных службы и учетной записи хранения. Для этого в обозревателе решений в проекте Windows Azure выбираем Свойства роли, которая обращается к службам хранилища, и идем на закладку Settings. Сейчас строка соединения настроена на локальный эмулятор: UseDevelopmentStorage=true.
Рис.15
Требуется сослать ее в Azure. Самый простой способ это сделать, чтобы не вводить руками учетную запись и первичный ключ - кликнуть на многоточие справа и выбрать DownloadPublishSettings:
Рис.16
Для текущей подписки будет скачан файл, позволяющий VisualStudioавтоматически получить вышеуказанные сведения. Он содержит сведения о сертификате, поэтому его следует сохранять в безопасное место. Этот файл мы указываем, нажав кнопку Import.
Рис.17
Приложение готово к публикации. Ее можно осуществить с портала управления WindowsAzureпутем создания пакета служб и файла конфигурации службы, либо напрямую из VisualStudioпри помощи мастера публикации. Для его запуска из контекстного меню проекта WindowsAzureвыбираем пункт Publish.
Рис.18
Приложение успешно публикуется.
Рис.19
Если теперь запустить его в облаке, указав адрес службы, созданной на Рис.13
Рис.20
диагностическая информация для целей тестирования (Рис.10-12) будет складываться в контейнер Рис.14 аналогично тому, как это происходило в случае эмулятора. Посмотреть собранную диагностику можно разными способами, в том числе через ServerExplorer, как это делалось на Рис.9. Однако теперь он будет указывать в Облако, т.к. мы изменили конфигурацию проекта и строку соединения (Рис.15-17).
Рис.21
В следующей статье мы поговорим об отладке и тестировании приложений непосредственно в Облаке.