Сеть доставки содержимого(CDN)

advertisement
Практическая работа
Сеть доставки содержимого(CDN) Windows
Azure
Версия работы:
2.0.0
Дата последнего изменения: 1/16/2016
Страница | 1
СОДЕРЖАНИЕ
ОБЩИЕ СВЕДЕНИЯ ................................................................................................................................... 3
УПРАЖНЕНИЕ 1. ИСПОЛЬЗОВАНИЕ СЕТИ ДОСТАВКИ СОДЕРЖИМОГО ДЛЯ ДОСТАВКИ
СТАТИЧЕСКОГО СОДЕРЖИМОГО .......................................................................................................... 6
Задача 1. Загрузка ресурсов с сервера размещения ..................................................................................................... 7
Задача 2. Загрузка статического содержимого в хранилище больших двоичных объектов ...............................12
Задача 3. Доставка содержимого из хранилища больших двоичных объектов ....................................................14
Задача 4. Включение сети доставки содержимого (CDN) ..........................................................................................17
Задача 5. Доставка ресурсов из CDN ..............................................................................................................................21
Задача 6. Публикация содержимого по протоколу HTTPS .........................................................................................26
УПРАЖНЕНИЕ 2. УПРАВЛЕНИЕ ИСТЕЧЕНИЕМ СРОКА ДЕЙСТВИЯ КЭША И ВЕРСИЯМИ
РЕСУРСОВ ................................................................................................................................................ 31
Задача 1. Управление временем существования закэшированного ресурса CDN ................................................31
Задача 2. Признание содержимого в кэше CDN недействительным с помощью управления версиями .........41
УПРАЖНЕНИЕ 3. КЭШИРОВАНИЕ СОДЕРЖИМОГО ИЗ РАЗМЕЩЕННЫХ СЛУЖБ ....................... 48
Задача 1. Создание размещенной службы для приложения ....................................................................................48
Задача 2. Включение CDN для размещенной службы ................................................................................................50
Задача 3. Формирование динамического содержимого ...........................................................................................55
Задача 4. Публикация приложения в Windows Azure .................................................................................................59
Задача 5. Тестирование приложения в облаке ............................................................................................................60
СВОДКА ..................................................................................................................................................... 64
ПРИЛОЖЕНИЕ А. ПУБЛИКАЦИЯ ПРИЛОЖЕНИЯ В WINDOWS AZURE ........................................... 65
Задача 1. Настройка учетных данных API управления Windows Azure в среде Visual Studio ...............................65
Задача 2. Настройка удаленного рабочего стола ........................................................................................................76
Задача 3. Публикация приложения в размещенной службе.....................................................................................82
Страница | 2
Общие сведения
Сеть доставки содержимого Windows Azure (CDN) предназначена для доставки содержимого
больших двоичных объектов Windows Azure. Сеть доставки содержимого Windows Azure предлагает
разработчику глобальное решение по доставке содержимого через широкополосные каналы связи.
Сеть доставки содержимого Windows Azure расположена в нескольких точках по всему миру (США,
Европа, Азия, Австралия и Южная Америка) и продолжает расширяться. Сеть доставки содержимого
Windows Azure кэширует большие двоичные объекты Windows Azure в стратегических узлах, чтобы
обеспечить доставку пользователям содержимого с максимальной пропускной способностью.
Доставку через CDN можно включить для любой учетной записи хранилища через портал
управления Windows Azure. Сеть доставки содержимого (CDN) обеспечивает пограничную доставку
только для больших двоичных объектов, которые находятся в открытых контейнерах больших
двоичных объектов, доступных для анонимного доступа.
Преимуществом использования CDN является более высокая производительность и доступность
для тех пользователей, которые находятся далеко от источника содержимого, помещенного
в хранилище больших двоичных объектов Windows Azure.
После включения доступа CDN к учетной записи хранилища портал управления предоставляет вам
доменное имя в следующем формате: http://<идентификатор>.vo.msecnd.net/. По этому имени
большие двоичные объекты доступны через общедоступный контейнер. Например, если
общедоступный контейнер называется «images», учетная запись хранилища — «youraccount», то
после предоставления учетной записи хранилища доступа через CDN пользователи могут обращаться
к большим двоичным объектам в этом контейнере по любому из следующих двух URL-адресов:

URL-адрес хранилища больших двоичных объектов Windows Azure:
http://youraccount.blob.core.windows.net/images/

URL-адрес сети доставки содержимого Windows Azure:
http://<identifier>.vo.msecnd.net/images/
При выполнении запроса по URL-адресу службы больших двоичных объектов Windows Azure
большой двоичный объект считывается непосредственно из службы больших двоичных объектов
Windows Azure. Если запрос производится по URL-адресу сети доставки содержимого Windows
Azure, то он перенаправляется на конечную точку CDN, ближайшую к местоположению, с которого
был выполнен запрос предоставления доступа к большому двоичному объекту. Если в данной
конечной точке большой двоичный объект не найден, то он извлекается из хранилища больших
двоичных объектов и кэшируется в конечной точке вместе с параметром времени жизни (TTL) для
закэшированного большого двоичного объекта. Время жизни указывает, на какое время большой
двоичный объект следует кэшировать в сети доставки содержимого. В течение этого срока не
обновляется службой больших двоичных объектов. Сеть доставки содержимого предпринимает
попытку обновления большого двоичного объекта из хранилища больших двоичных объектов
Страница | 3
Windows Azure только после истечения времени жизни. Как описано в этой статье msdn, по
умолчанию время жизни принимается равным 20 % от интервала между текущим временем
и временем последнего изменения вплоть до максимального интервала в 72 часа. Например,
большой двоичный объект, со времени последнего изменения которого прошло 30 минут,
в течение шести минут будет считаться новым в кэше сети доставки содержимого. Если это
значение задано для большого двоичного объекта, то время жизни будет равно значению,
указанному в HTTP-заголовке Cache-Control.
Ценность кэширования больших двоичных объектов в сети доставки содержимого Windows Azure
востребована только тогда, когда содержимое доставляется из пограничного кэша сети доставки
содержимого, то есть содержимое, запрошенное только один раз в течение времени жизни
большого двоичного объекта, не сможет обеспечить повышение производительности в результате
пограничного кэширования. Содержимое большого двоичного объекта, которое приносит
наибольшую выгоду от кэширования, — это большие двоичные объекты, к которым часто
обращаются в период их времени жизни при кэшировании.
Уже закэшированные в сети доставки содержимого большие двоичные объекты останутся
закэшированными до тех пор, пока не истечет время жизни каждого из них. По истечении
времени жизни сеть доставки содержимого Windows Azure выполнит проверку допустимости
конечной точки сети доставки содержимого и возможность анонимного доступа к большому
двоичному объекту. Если это не так, то большой двоичный объект будет отсутствовать в кэше. Это
означает, что если необходимо изменить содержимое большого двоичного объекта и в настоящее
время он закэширован в сети доставки содержимого, то новое содержимое не будет доступно
через сеть доставки содержимого до тех пор, пока эта сеть не обновит содержимое после
истечения времени жизни закэшированного содержимого.
При включении сети доставки содержимого конфигурация, созданная для этой конечной точки,
не становится недоступной немедленно. Может потребоваться до 60 минут на регистрацию
для распространения по всему миру через сеть доставки содержимого. Пользователь, который
попытается немедленно получать данные по имени домена сети доставки содержимого,
будет получать ошибку 400 до тех пор, пока конфигурация не обновится по всему миру.
Цели
На этом практическом занятии рассматриваются следующие вопросы.

Включение сети доставки содержимого Windows Azure

Использование сети доставки содержимого Windows Azure для статического содержимого

Использование заголовков времени жизни для управления сценариями кэширования сети
доставки содержимого
Страница | 4
Предварительные требования
Для выполнения этой практической работы требуется:

IIS 7 (с ASP.NET, HTTP-активация WCF)

Microsoft Visual Studio 2010

Microsoft .NET Framework 4.0

Средства Windows Azure для Microsoft Visual Studio 1.6
Установка
Для выполнения упражнений, приведенных в этой практической работе, необходимо установить среду.
1. Откройте окно проводника Windows и перейдите в папку Source практической работы.
2. Дважды щелкните файл Setup.cmd в этой папке, чтобы запустить процесс установки, который
настроит среду и установит фрагменты кода Visual Studio для этой практической работы.
3. Если откроется диалоговое окно контроля учетных записей, подтвердите выполнение
действия.
Примечание. Перед запуском программы установки удостоверьтесь в выполнении
предварительных условий для выполнения этой практической работы.
Использование фрагментов кода
По всему тексту практической работы имеются инструкции по вставке блоков кода. Для удобства
большая часть этого кода предоставляется в виде фрагментов кода Visual Studio, которые можно
использовать в Visual Studio 2010, чтобы не добавлять код вручную.
Если вы не знакомы с фрагментами кода Visual Studio, то научиться пользоваться ими можно
в документе Setup.docx в папке Assets обучающего набора, в котором есть раздел с описанием
использования таких фрагментов.
Упражнения
В этой практической работе имеются следующие упражнения.
1. Использование сети доставки содержимого для доставки статического содержимого
2. Управление истечением срока действия кэша и версиями ресурсов
3. Кэширование содержимого из размещенных служб
Страница | 5
Предполагаемое время выполнения данной практической работы: 60 минут.
Примечание. При первом запуске Visual Studio необходимо выбрать одну из коллекций
стандартно заданных параметров. Каждая такая стандартная коллекция параметров
предназначена для определенного стиля разработки, она определяет расположение окон,
поведение редактора, фрагменты кода IntelliSense и параметры диалоговых окон. Приведенные в
этом практическом задании процедуры описывают действия, которые необходимо предпринять
для выполнения определенной задачи в Visual Studio с использованием коллекции Общие
параметры разработки. Если выбрать другую коллекцию параметров для среды разработки,
то эти процедуры могут оказаться для вас не совсем точными, это следует учитывать.
Упражнение 1. Использование сети
доставки содержимого для доставки
статического содержимого
В этом упражнении будет рассмотрено использование сети доставки содержимого Windows Azure
(CDN) для доставки статического содержимого в веб-приложении. Для этой цели используется
образец приложения, реализованного с помощью ASP.NET MVC, который использует такие
статические ресурсы, как каскадные таблицы стилей (CSS) и файлы скриптов. В своей исходной
реализации эти ресурсы хранятся в структуре папок приложения, а страницы приложения на них
ссылаются. В этом сценарии при просмотре страницы браузер получает данные статические
ресурсы из веб-роли, на которой размещено приложение.
Для выгрузки доставленного статического содержимого веб-приложение может воспользоваться
хранилищем Windows Azure. Чтобы исследовать этот сценарий, загрузите статическое содержимое
примера приложения в хранилище больших двоичных объектов Windows Azure и измените ссылки
в нем таким образом, чтобы они указывали на загруженные большие двоичные объекты, таким
образом освободив сервер размещения от необходимости управления этими ресурсами.
Помимо того, что доставка содержимого в хранилище больших двоичных объектов полезна с точки
зрения занимаемых ресурсов сервера, где размещено приложение, это также означает, что по
всему миру клиенты будут получать содержимое из одного и того же расположения. Для клиентов,
удаленных от центра обработки данных, где размещена учетная запись служб хранилища Windows
Azure, задержка может увеличиться. Включение CDN для учетной записи хранилища позволит
реплицировать и кэшировать ресурсы во многих точках по всему миру, что позволит разместить
Страница | 6
содержимое ближе к пользователям. Для выполнения этого упражнения включите CDN для своей
учетной записи хранилища и настройте приложение на его использование.
Задача 1. Загрузка ресурсов с сервера размещения
В этой задаче будет запущено приложение, которое ссылается на статические ресурсы внутри
своей структуры папок.
1. Откройте Visual Studio с правами администратора, выбрав Пуск | Все программы |
Microsoft Visual Studio 2010, щелкнув правой кнопкой мыши пункт Microsoft Visual Studio
2010 и выбрав команду Запуск от имени администратора.
2. Если откроется диалоговое окно Контроль учетных записей, подтвердите продолжение
действия.
3. В меню Файл выберите пункт Открыть, затем щелкните Проект/Решение. В диалоговом
окне Открытие проекта в папке Source этой практической работы выберите Ex1UsingAzureCDN\Begin, укажите Begin.sln и нажмите кнопку Открыть.
4. Откройте страницу Site.Master в папке Views\Shared проекта CDNSample. Проверьте
разметку, в частности содержимое тега head, и обратите внимание на то, каким образом
вспомогательный метод генерирует URL-адрес связанных ресурсов.
Рис. 1
Связывание статического содержимого в приложении
5. Теперь откройте файл UrlHelperExtension.cs в папке Helpers. Класс UrlHelperExtension
содержит методы расширения для класса UrlHelper, который обычно используется для
создания URL-адресов в приложениях MVC. Изучите метод StaticContent этого класса
и обратите внимание на то, как он возвращает абсолютный путь, который сопоставляет
ресурсы для папки Content приложения.
Страница | 7
Рис. 2
Использование методов расширения для связывания статических ресурсов
Примечание. Использование вспомогательного метода для построения URL-адреса
статических ресурсов позволяет легко осуществлять перемещение этих ресурсов.
6. Откройте представление Index.aspx в папке Views\Home проекта. Обратите внимание, что для
формирования выходных данных используется частичное представление ImageUserControl.
Рис. 3
Разметка для представления корневой папки
Примечание. Частичное представление ImageUserControl отображает изображение
вместе с его URL-адресом и сведениями об источнике его загрузки — с сервера
размещения, из хранилища больших двоичных объектов или из сети доставки
содержимого. Этот элемент управления расположен в папке Views\Shared приложения и
использует метод расширения в классе UrlHelperExtension с именем GetSource, который
анализирует URL-адрес изображения, пытаясь определить, откуда оно было загружено.
Внимание! Прежде чем запустить решение на выполнение, убедитесь, что выбран
запускаемый проект, а начальная страница веб-проекта пуста.
Страница | 8
Чтобы выбрать запускаемый проект, в обозревателе решений щелкните правой кнопкой
мыши проект CDNService и выберите Назначить запускаемым проектом. Чтобы задать
начальную страницу, в обозревателе решений щелкните правой кнопкой мыши проект
CDNSample и выберите пункт Свойства. В окне Свойства перейдите на вкладку Интернет
и в разделе Действие при запуске выберите параметр Указанная страница. Оставьте
значение этого поля пустым.
7. Чтобы построить и запустить приложение в эмуляторе вычислений, нажмите клавишу F5.
Дождитесь открытия домашней страницы в браузере, которая должна выглядеть так, как
показано на следующем рисунке. Обратите внимание, что источником изображения
является сервер, где размещено приложение, а его URL-адрес относится к папке Content
приложения.
Рис. 4
На домашней странице приложения отображается содержимое, загруженное с сервера
размещения
8. При просмотре страницы в Internet Explorer 8 или более поздней версии нажмите клавишу
F12, чтобы открыть средства разработчика.
Страница | 9
Примечание. Домашняя страница приложения содержит ссылки на несколько
статических ресурсов, включая таблицу стилей (CSS), файл скрипта и изображение.
Для выполнения следующих шагов потребуется применение средств разработки Internet
Explorer, доступных в Internet Explorer 8 или более поздней версии, чтобы определить
местоположение, используемое браузером для загрузки всех связанных ресурсов.
При использовании другого браузера следует пользоваться другими средствами для
отображения источника этих документов, например при отображении исходного кода
страницы или исследования происхождения каждого связанного элемента. Кроме того,
можно просматривать все запросы, выполненные браузером в таком средстве отладки
HTTP, как Fiddler.
9. В меню «Средства разработчика» выберите пункт Изображения и щелкните Просмотр
отчета об изображении. Обратите внимание, что атрибут SRC указывает на то, что
изображение загружено из папки Content/images приложения.
Рис. 5
В отчете об изображении показано изображение, загруженное из папки «Content»
приложения
Страница | 10
10. Чтобы проверить источник файла скрипта, в пользовательском интерфейсе средств
разработки перейдите на вкладку Сценарий и щелкните раскрывающийся список
сценариев на этой странице. Обратите внимание, что сценарии также загружены из папки
Scripts, вложенной в папку Content.
Рис. 6
В представлении скрипта отображен скрипт, загруженный из папки «Content»
приложения
11. Аналогичным образом, чтобы определить источник CSS-файлов, перейдите на вкладку CSS
и щелкните раскрывающийся список таблиц стилей CSS, загружаемых этой страницей.
Снова обратите внимание, что источником таблицы стилей является папка Content/styles
приложения.
Рис. 7
В представлении CSS отображаются таблицы стилей, загруженные из папки «Content»
приложения
12. (Необязательно) Запустите средство отладки HTTP Fiddler. Затем в адресной строке окна
браузера замените часть узла текущего адреса (127.0.0.1) на имя узла ipv4.fiddler (например,
Страница | 11
http://IPv4.Fiddler:81) для перенаправления локального трафика через «Fiddler». Теперь
просмотрите запросы, выполненные браузером, на панели Fiddler Веб-сеансы, в частности
столбец Узел, где отображены запросы к серверу, на котором размещено приложение.
Рис. 8
В системе отслеживания «Fiddler» показаны запросы к серверу размещения
13. Чтобы остановить отладку, закройте окно браузера и завершите работу приложения.
Задача 2. Загрузка статического содержимого в хранилище больших двоичных объектов
В этой задаче статическое содержимое приложения загружается в контейнер службы больших
двоичных объектов Windows Azure с помощью скрипта PowerShell. Скрипт рекурсивно копирует
все файлы и каталоги в папке Content приложения в определенный контейнер хранилища
больших двоичных объектов.
1. Чтобы настроить учетную запись служб хранилища Windows Azure, в которое инструмент
загружает файлы, откройте файл configuration.xml в папке Assets этой практической работы.
2. В этом файле введите идентификатор подписки на Windows Azure, имя и первичный ключ
доступа к учетной записи хранилища, заменив соответствующие заполнители в этом файле.
Страница | 12
Рис. 9
Настройка скрипта для загрузки содержимого в хранилище больших двоичных объектов
3. Сохраните файл configuration.xml.
4. В проводнике Windows перейдите в папку Assets этой практической работы, щелкните
правой кнопкой мыши скрипт UploadBlobs.cmd и выберите команду Запуск от имени
администратора. Дождитесь завершения выполнения скрипта.
Рис. 10
Загрузка статического содержимого в хранилище больших двоичных объектов Windows Azure
Страница | 13
Примечание. Скрипт использует библиотеку StorageClient для загрузки ресурсов, хранящихся
в папке Content приложения, в контейнер хранилища больших двоичных объектов с тем же
именем content, а затем обновляет заголовок кэша каждого загруженного большого
двоичного объекта, задавая для него время жизни (TTL) сроком в 1 день.
Как правило, для редко изменяющихся статических ресурсов можно настроить относительно
большие значения времени жизни, чтобы пограничные серверы сети доставки содержимого
могли кэшировать это содержимое и предотвратить частое обращение к большим двоичным
объектам из этого источника. Но обратите внимание, что после кэширования содержимого в
большие двоичные объекты источника нельзя внести изменения из CDN до тех пор, пока не
истечет время жизни. Если ресурс с большим временем жизни нуждается в обновлении, то
можно применить доступные приложению методы обновления содержимого. В упражнении
2 этой практической работы приведен пример такого метода.
Задача 3. Доставка содержимого из хранилища больших двоичных объектов
В этой задаче в приложение вносятся изменения, чтобы его статическое содержимое
доставлялось из больших двоичных объектов, загруженных в предыдущей задаче.
1. В обозревателе решений выберите проект CDNSample. Откройте файл класса
UrlHelperExtension в папке Helpers и замените текст метода StaticContent приведенным
ниже кодом, заменив заполнитель [YOUR-ACCOUNT-NAME] именем своей учетной записи
хранилища Windows Azure.
C#
public static string StaticContent(this UrlHelper helper,string resource)
{
return "http://[YOUR-ACCOUNT-NAME].blob.core.windows.net/content/" +
resource;
}
2. Чтобы построить и запустить приложение в эмуляторе вычислений, нажмите клавишу F5.
Дождитесь открытия домашней страницы в браузере и удостоверьтесь, что все продолжает
нормально загружаться.
Страница | 14
Рис. 11
На домашней странице отображается изображение, загружаемое из хранилища
больших двоичных объектов
3. Чтобы открыть средства разработчика, в обозревателе Internet Explorer нажмите клавишу
F12. Из этого меню выберите пункт Изображения и щелкните Просмотр отчета об
изображении. Обратите внимание, что в настоящее время загрузка изображения
выполняется из контейнера Content в учетной записи хранилища Windows Azure.
Примечание. Для выполнения следующих шагов потребуется применение средств
разработки Internet Explorer, доступных в Internet Explorer 8 или более поздних версиях,
чтобы определить местоположение, используемое браузером для загрузки всех
связанных ресурсов. При использовании другого браузера следует пользоваться другими
средствами для отображения источника этих документов, например при отображении
исходного кода страницы или исследования происхождения каждого связанного
элемента. Кроме того, можно просматривать все запросы, выполненные браузером
в таком средстве отладки HTTP, как Fiddler.
Страница | 15
Рис. 12
В отчете об изображении отображается содержимое, связанное с большим двоичным
объектом служб хранилища Windows Azure
4. Аналогичным образом перейдите на вкладку Сценарий и обратите внимание, что
источником скрипта также является хранилище больших двоичных объектов.
Рис. 13
В представлении скрипта отображен скрипт, загруженный из хранилища больших
двоичных объектов
Страница | 16
5. В заключение перейдите на вкладку CSS, чтобы определить источник таблицы стилей.
Рис. 14
В представлении CSS отображена таблица стилей, загруженная из хранилища больших
двоичных объектов
6. (Необязательно) Запустите Fiddler, обновите страницу в окне браузера и просмотрите
запросы, выполненные браузером, на панели Веб-сессии, в частности столбец Узел,
где отображаются запросы к учетной записи служб хранилища Windows Azure.
Рис. 15
В системе отслеживания «Fiddler» отображены запросы к сети доставки
содержимого (CDN)
Задача 4. Включение сети доставки содержимого (CDN)
В этой задаче выполняется включение сети доставки содержимого (CDN) в службе хранилища
Windows Azure.
1. Перейдите в портал управления и при необходимости войдите в систему с учетными
данными Windows Live ID.
Страница | 17
2. В пользовательском интерфейсе портала управления перейдите на вкладку Размещенные
службы, учетные данные хранилища и CDN, выберите параметр CDN и нажмите кнопку
Создать конечную точку на ленте.
Рис. 16
Включение конечной точки CDN для учетной записи хранилища
Страница | 18
3. В диалоговом окне Создание новой конечной точки CDN откройте раскрывающийся
список Выбрать поставщика содержимого и выберите имя учетной записи хранилища,
для которой необходимо включить CDN. Если учетная запись относится к нескольким
подпискам, выберите ту, на которой создана учетная запись хранилища. Установите
флажок в поле Включить CDN, не устанавливайте флажок в полях HTTPS и Строка запроса.
Нажмите кнопку ОК.
Рис. 17
Создание новой конечной точки CDN
4. Прочитайте сообщение, выведенное после включения CDN, и подтвердите продолжение
действия.
Рис. 18
Включение использования CDN
Страница | 19
5. Дождитесь, пока состояние конечной точки CDN не изменится на Включено. На средней
панели выберите эту конечную точку и запомните значение Конечная точка HTTP по
умолчанию в окне Свойства. Впоследствии это значение понадобится для настройки
приложения.
Рис. 19
Извлечение конечной точки CDN для учетной записи хранилища
Примечание. После включения CDN потребуется некоторое время, прежде чем эти
изменения распространятся по всему миру. Пользователь, который попытается
немедленно получать данные по имени домена сети доставки содержимого, будет
получать ошибку 400 до тех пор, пока конфигурация не обновится по всему миру.
URL-адрес, выделенный Windows Azure, обеспечивает доступ к конечной точке CDN.
В качестве варианта можно назначить пользовательский домен и использовать его для
доступа к содержимому в CDN. Чтобы воспользоваться этой функцией, необходимо
зарегистрировать доменное имя и присвоить его конечной точке CDN. Чтобы запустить
Страница | 20
процедуру, нажмите кнопку Добавить домен в разделе «Пользовательские домены» ленты.
Обратите внимание, что для выполнения этой практической работы пользовательский
домен не потребуется. В данном разделе отсутствует объяснение процедуры включения
этой функции.
Рис. 20
Настройка пользовательского домена для сети доставки содержимого (CDN)
Задача 5. Доставка ресурсов из CDN
В этой задаче в приложение вносятся изменения, чтобы оно могло извлекать статическое
содержимое из CDN.
Примечание. Внимание! Если во время выполнения предыдущей задачи CDN был включен
для учетной записи хранилища, то перед выполнением текущей задачи необходимо, чтобы
изменения вступили в силу. Это может занять около 1 часа.
Если конечная точка CDN не распространилась полностью по всему миру, то при просмотре
приложения могут возникнуть ошибки скрипта и будут потеряны таблицы стилей.
1. Откройте файл UrlHelperExtension.cs в папке Helpers приложения и замените текст метода
StaticContent на приведенный ниже код, заменив заполнитель [YOUR-BLOB-STORAGE-CDNENDPOINT] конечной точкой CDN, записанной при выполнении предыдущей задачи во
время включения CDN в учетной записи хранилища, например az12345.vo.msecnd.net.
C#
public static string StaticContent(this UrlHelper helper, string resource)
{
return "http://[YOUR-BLOB-STORAGE-CDN-ENDPOINT]/content/" + resource;
}
Страница | 21
Примечание. StaticContent — это вспомогательный метод, который формирует URLадрес для ресурса, помещенного в хранилище больших двоичных объектов Windows
Azure и доставленного CDN.
2. Чтобы построить и запустить приложение в эмуляторе вычислений, нажмите клавишу F5.
Убедитесь, что все продолжает нормально загружаться.
Рис. 21
На домашней странице отображается изображение, загруженное из CDN
3. Чтобы открыть средства разработчика, в обозревателе Internet Explorer нажмите клавишу F12.
Из этого меню выберите пункт Изображения и щелкните Просмотр отчета об изображении.
Обратите внимание, что теперь изображение загружается из конечной точки CDN.
Страница | 22
Рис. 22
В отчете об изображении отображается содержимое, загруженное из CDN
4. Аналогичным образом перейдите на вкладку Сценарий и обратите внимание,
что источником скрипта также является сеть доставки содержимого (CDN).
Рис. 23
В представлении скрипта отображен скрипт, загруженный из CDN
Страница | 23
5. И в заключение перейдите на вкладку CSS и удостоверьтесь, что браузер загрузил таблицу
стилей из CDN.
Рис. 24
В представлении CSS отображена таблица стилей, загруженная из CDN
6. (Необязательно) Запустите Fiddler, обновите страницу в окне браузера и просмотрите
запросы, выполненные браузером, на панели Fiddler Веб-сессии, в частности в столбце
Узел, где отображены запросы к конечной точке CDN.
Рис. 25
В системе отслеживания «Fiddler» отображены запросы к сети доставки
содержимого (CDN)
7. Далее откройте окно командной строки.
8. В командной строке введите следующую команду, чтобы отобразить маршрут и число
«прыжков», необходимых для извлечения ресурса из службы больших двоичных
объектов. Замените заполнитель [BLOB-STORAGE-ENDPOINT] именем узла учетной записи
службы больших двоичных объектов, например yourname.blob.core.windows.net.
Страница | 24
Примечание. «Прыжок» — это термин, используемый для описания шага пути, который
проходит пакет по мере продвижения по сети к пункту назначения. Выходные данные
трассировочного маркера отображают каждый прыжок на маршруте, три измеренных
значения времени между отправкой запроса и получением ответа в миллисекундах и IPадрес каждого промежуточного сетевого устройства.
Время между отправкой запроса и получением ответа (RTT) показывает, сколько
времени требуется пакету для достижения пункта назначения и возвращения обратно
с указанием задержки сетевой ссылки.
Командная строка
tracert –d [BLOB-STORAGE-ENDPOINT]
Рис. 26
Выходные данные трассировочного маркера для учетной записи службы больших
двоичных объектов
Страница | 25
9. Далее введите следующую команду для отображения сетевого пути, используемого для
получения того же изображения из CDN. Замените заполнитель [CDN-ENDPOINT] URLадресом конечной точки CDN, записанный ранее для учетной записи хранилища. Обратите
внимание, что для доступа к изображению из CDN требуется меньше прыжков и что время
между отправкой запроса и получением ответа (RTT) значительно меньше, что означает
более низкие задержки.
Командная строка
tracert –d [CDN-ENDPOINT]
Рис. 27
Выходные данные трассировочного маркера на пограничном сервере CDN
Задача 6. Публикация содержимого по протоколу HTTPS
Во многих веб-приложениях страницы, к которым производится обращение по протоколу HTTPS,
часто ссылаются на другое статическое содержимое. В таком случае можно получить выигрыш от
использования CDN для доставки, например изображений и таблиц стилей. Однако, если такое
содержимое опубликовано по протоколу HTTP, тогда как остальная часть содержимого использует
протокол HTTPS, вызовет появление предупреждений безопасности в браузере, что в целом
снизит удобство работы для пользователей. Включение протокола HTTPS для конечной точки CDN
позволит избежать этой проблемы, обеспечив надежную доставку всего содержимого.
В этой задаче рассматривается настройка приложения данной практической работы для
использования протокола SSL и его локальный запуск в эмуляторе вычислений в целях
наблюдения за предупреждениями безопасности о смешанном содержимом. После этого
необходимо будет включить поддержку протокола HTTPS для конечной точки CDN и проверить
приложение еще раз, чтобы убедиться в том, что предупреждения больше не выводятся.
1. В обозревателе решений разверните узел Роли в проекте CDNService и дважды щелкните
роль CDNSample для открытия окна свойств.
Страница | 26
2. Выберите вкладку Конечные точки, найдите конечную точку с именем HttpIn и измените
ее Протокол на https.
Рис. 28
Включение протокола SSL в веб-роли
Примечание. Как правило, чтобы включить протокол SSL для конечной точки роли,
необходимо указать сертификат на вкладке Сертификаты и назначить этому сертификату
конечную точку HTTPS в разделе Имя SSL-сертификата. В этом случае можно лишь
проверить приложение в эмуляторе облака, который использует собственный
самозаверяющий сертификат, так что этот шаг можно пропустить.
Дополнительные сведения о защите приложений Windows Azure с помощью протокола
SSL см. в практической работе Развертывание приложений в Windows Azure данного
обучающего набора.
3. Чтобы построить и запустить приложение в эмуляторе облака, нажмите клавишу F5.
Обратите внимание, что в браузере отображается предупреждение безопасности
относительно сертификата безопасности сайта. Чтобы продолжить, перейдите по
ссылке Перейти на веб-сайт (не рекомендуется).
Страница | 27
Рис. 29
Предупреждение безопасности о ненадежном сертификате
Примечание. Эмулятор облака использует свой собственный самозаверяющий
сертификат для обеспечения поддержки протокола SSL. Однако центр сертификации
для используемого им сертификата не является доверенным, поэтому выводится
предупреждение. Это предупреждение не относится к проблеме, рассматриваемой
в этом упражнении, поэтому его можно проигнорировать при локальном тестировании
приложения.
4. После перехода на веб-сайт обратите внимание, что браузер отображает предупреждение
безопасности о том, что некоторое содержимое на странице, которую вы собираетесь
просматривать, было доставлено с помощью протокола отличного от HTTPS.
Рис. 30
Предупреждение безопасности о защищенном содержимом
Примечание. Риск отображения смешанного содержимого заключается в том, что
небезопасная веб-страница или скрипт может иметь доступ к информации из
безопасного содержимого.
5. Обратите внимание, что страница обрабатывается неправильно, поскольку не были
извлечены таблица стилей и изображения из CDN по протоколу HTTP.
Страница | 28
Рис. 31
Отсутствующие элементы при просмотре только безопасно доставленного
содержимого
6. Обновите страницу повторно и нажмите кнопку Показать все содержимое
в предупреждении безопасности. Обратите внимание, что страница отображается
правильно, но такой подход вынуждает следовать небезопасной практике.
7. Чтобы выйти из приложения и отключить отладчик, закройте окно браузера.
8. Вернитесь на портал управления, перейдите на вкладку Размещенные службы, учетные
данные хранилища и CDN и выберите параметр CDN.
9. На средней панели выберите конечную точку CDN, созданную ранее для учетной записи
хранилища, и установите флажок в поле HTTPS на ленте.
Страница | 29
Рис. 32
Включение поддержки протокола HTTPS для конечной точки CDN
10. После включения поддержки HTTPS необходимо распространить изменения в каждый
узел сети доставки содержимого (CDN). Прежде чем продолжить выполнение следующих
шагов, подождите как минимум 60 минут либо, если не хотите ждать, перейдите
к следующему упражнению, выполнение которого не зависит от наличия протокола
HTTPS. Позже можно будет вернуться к этой задаче и завершить ее.
11. Далее откройте файл UrlHelperExtension.cs в папке Helpers проекта CDNSample и найдите
метод StaticContent. В строке кода, который формирует URL-адрес ресурса в CDN,
измените используемую схему с http на https.
Рис. 33
Сопоставление статического содержимого с конечной точкой HTTPS
Страница | 30
12. Чтобы перезапустить приложение в эмуляторе вычислений, снова нажмите клавишу F5.
Пропустите предупреждение о ненадежном сертификате, которое не связано
с рассматриваемым в этой задаче вопросом, и обратите внимание, что на этот раз доступ
к домашней странице приложения можно получить без отображения предупреждений
безопасности в браузере.
Рис. 34
Получение содержимого HTTPS из CDN
Упражнение 2. Управление
истечением срока действия
кэша и версиями ресурсов
Параметр времени жизни (TTL) для большого двоичного объекта определяет, в течение какого
времени пограничный сервер CDN будет возвращать закэшированную копию ресурса, прежде
чем запросит новую копию из хранилища больших двоичных объектов. По истечении этого срока
следующий запрос заставит CDN-сервер вновь получить ресурс из источника большого двоичного
объекта, в результате кэширование будет произведено снова.
В этом упражнении рассматривается способ управления временем жизни ресурсов, кэшируемых
CDN, и показана методика, позволяющая заставить CDN получать обновленное содержимое из
службы больших двоичных объектов всякий раз, когда требуется обновление закэшированного
ресурса.
Задача 1. Управление временем существования закэшированного ресурса CDN
В этой задаче выполняется обновление приложения таким образом, чтобы при каждом обращении
к домашней странице на отображаемое на этой странице накладывался заголовок с текущим
временем, а затем выполнялось сохранение обновленного изображения в хранилище больших
Страница | 31
двоичных объектов с заданием времени жизни 30 секунд. Чтобы показать, как значение параметра
времени жизни (TTL) влияет на ответы из CDN, добавим на страницу второе изображение,
источником которого будет являться исходный большой двоичный объект, разрешающий
просматривать изображение, извлеченное из службы больших двоичных объектов, и параллельно
изображение, возвращенное CDN.
1. Откройте Visual Studio с правами администратора, выбрав Пуск | Все программы |
Microsoft Visual Studio 2010, щелкнув правой кнопкой мыши пункт Microsoft Visual Studio
2010 и выбрав команду Запуск от имени администратора.
2. Если откроется диалоговое окно Контроль учетных записей, подтвердите продолжение
действия.
3. В меню Файл выберите пункт Открыть, затем щелкните Проект/Решение. В диалоговом
окне Открытие проекта в папке Source практической работы выберите Ex2CDNVersioning\Begin, укажите Begin.sln и нажмите кнопку Открыть. Кроме того, можно
перейти к решению, выполненному в ходе предыдущего упражнения.
Примечание. Если работа начинается с нового решения, настройте конечную точку CDN
в методе расширения StaticContent в файле UrlHelperExtension.cs папки Helpers.
4. Чтобы указать параметры учетной записи хранилища, включая имя вашей учетной записи
хранилища и ключ доступа, необходимо обновить строку подключения. Для этого
замените заполнители [YOUR-ACCOUNT-NAME] и [YOUR-ACCOUNT-KEY] в файле
ServiceConfiguration.cscfg, где [YOUR-ACCOUNT-NAME] — это имя учетной записи
в хранилище Windows Azure, а [YOUR-ACCOUNT-KEY] — ключ доступа.
Рис. 35
Настройка строки подключения учетной записи хранилища Windows Azure
Примечание. Учетная запись хранилища — это уникальная конечная точка для служб
больших двоичных объектов, очередей и таблиц Windows Azure. Для использования
этих служб необходимо создать учетную запись хранилища на портале управления.
5. Откройте файл IndexViewModel.cs в папке Models проекта CDNSample и вставьте
следующее (выделенное) свойство в класс.
Страница | 32
(Фрагмент кода — Windows Azure CDN- Ex02 IndexViewModel TTL property)
C#
public class IndexViewModel
{
public double TTL { get; set; }
}
6. Откройте файл HomeController.cs в папке Controllers приложения.
7. Добавьте объявление для константы IMAGE_TTL в класс HomeController.
(Фрагмент кода — Windows Azure CDN- Ex02 IMAGE_TTL constant)
C#
[HandleError]
public class HomeController : Контроллер
{
const int IMAGE_TTL = 30;
...
}
8. Затем вставьте метод SaveImageToStream в этот класс, как показано в следующем
фрагменте кода.
(Фрагмент кода — Windows Azure CDN- Ex02 SaveImageToStream method)
C#
[HandleError]
public class HomeController : Контроллер
{
...
private void SaveImageToStream(Stream output, string caption)
{
using (FileStream input =
System.IO.File.OpenRead(HttpContext.Server.MapPath("~/content/images/Source.jp
g")))
{
// наложение заголовка на входное изображение
var image = new Bitmap(input);
using (Graphics graphics = Graphics.FromImage(image))
{
using (Font font = new Font("Tahoma", 11F, FontStyle.Regular))
{
graphics.SmoothingMode = SmoothingMode.AntiAlias;
SizeF size = graphics.MeasureString(caption, font, image.Width);
Страница | 33
graphics.DrawString(caption, font, Brushes.White, image.Width size.Width - 5, 6);
graphics.DrawString(caption, font, Brushes.Black, image.Width size.Width - 6, 5);
}
}
// сохранение изображения в поток
image.Save(output, ImageFormat.Jpeg);
}
}
}
9. Теперь вставьте метод UpdateBlob в класс HomeController, как показано ниже.
(Фрагмент кода — Windows Azure CDN- Ex02 UpdateBlob method)
C#
[HandleError]
public class HomeController : Контроллер
{
...
private void UpdateBlob(string caption, double ttl)
{
// считывание параметров конфигурации учетной записи
var storageAccount =
CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
var blobStorage = storageAccount.CreateCloudBlobClient();
CloudBlockBlob dstBlob =
blobStorage.GetBlockBlobReference("content/images/Destination.jpg");
using (BlobStream output = dstBlob.OpenWrite())
{
SaveImageToStream(output, caption);
}
// сохранение в большой двоичный объект и задание его времени жизни
dstBlob.Properties.ContentType = "image/jpeg";
dstBlob.Properties.CacheControl = "public, max-age=" + ttl.ToString("N0");
dstBlob.SetProperties();
}
}
Страница | 34
Примечание. Метод UpdateBlob накладывает заголовок на исходное изображение
вместе с текущим временем. Затем этот метод помещает обновленное изображение
обратно в хранилище больших двоичных объектов, устанавливая его заголовок CacheControl, определяя время жизни больших двоичных объектов в течение 30 секунд.
Обратите внимание, что значение времени жизни установлено чрезвычайно низким
для проверки истечения срока его действия. Чтобы ощутить преимущества CDN, время
жизни должно быть, как правило, значительно больше.
10. Найдите действие Index и замените его текст следующим (выделенным) кодом.
(Фрагмент кода — Windows Azure CDN- Ex02 Index action)
C#
[HandleError]
public class HomeController : Контроллер
{
const int IMAGE_TTL = 30;
public ActionResult Index()
{
UpdateBlob(DateTime.Now.ToLongTimeString(), IMAGE_TTL);
DateTime lastRefreshed =
(DateTime)(HttpContext.Application["LastRefreshed"] ?? DateTime.MinValue);
DateTime currentTime = DateTime.Now;
double age = currentTime.Subtract(lastRefreshed).TotalSeconds;
if (age > IMAGE_TTL)
{
HttpContext.Application["LastRefreshed"] = currentTime;
age = 0;
}
IndexViewModel model = new IndexViewModel()
{
TTL = IMAGE_TTL - age
};
return View(model);
}
}
Страница | 35
Примечание. Вставленный код вызывает метод UpdateBlob для наложения текущего
времени на исходное изображение и сохранения результата обратно в большой
двоичный объект. Затем метод оценивает Время жизни (TTL) ресурса в кэше CDN,
сохраняя отметку времени, где записывается время выполнения последнего обновления
страницы пользователем. Каждый раз после истечения времени жизни ресурса этот
метод сбрасывает расчетное значение и обновляет отметку времени LastRefreshed до
текущего времени.
11. Откройте файл UrlHelperExtension.cs в папке Helpers проекта CDNSample и добавьте
следующий (выделенный) метод в класс.
(Фрагмент кода — Windows Azure CDN- Ex02 BlobStorageContent Helper Method)
C#
public static class UrlHelperExtension
{
...
public static string BlobStorageContent(this UrlHelper helper, string
resource)
{
return "http://"
+
Microsoft.WindowsAzure.CloudStorageAccount.FromConfigurationSetting("DataConne
ctionString").BlobEndpoint.Authority
+
(Microsoft.WindowsAzure.CloudStorageAccount.FromConfigurationSetting("DataConn
ectionString").BlobEndpoint.IsLoopback ? "/devstoreaccount1" : "")
+ "/content/"
+ resource;
}
...
}
Примечание. BlobStorageContent является вспомогательным методом, который
формирует URL-адрес для статического ресурса в службе больших двоичных объектов.
12. Откройте представление Index.aspx в папке Views\Home.
13. Найдите элемент управления заполнителем Content2 и вставьте следующий (выделенный)
блок скрипта непосредственно под открывающим тегом, как показано ниже.
(Фрагмент кода — Windows Azure CDN- Ex02 DisplayTTL script)
Страница | 36
HTML
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<script type="text/javascript">
$(document).ready(function () {
var ttl = <%=
Model.TTL.ToString(System.Globalization.CultureInfo.InstalledUICulture) %>;
var timer = window.setInterval(function () {
if (ttl >= 0) {
$('#ttl').text(ttl.toFixed(1) + ' seconds');
}
else {
$('#ttl').addClass('expired').text('Cache expired!');
window.clearInterval(timer);
}
--ttl;
}, 1000);
});
</script>
<table>
...
</table>
</asp:Content>
Примечание. Вставленный скрипт реализует таймер обратного отсчета, который
оценивает оставшееся до истечения время жизни.
14. Далее найдите элемент table в элементе управления заполнителем Content2 и вставьте
две дополнительные строки, как показано в следующем (выделенном) фрагменте кода.
(Фрагмент кода — Windows Azure CDN- Ex02 Source Image)
HTML
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<script type="text/javascript">
...
</script>
<table>
<tr>
<% Html.RenderPartial("ImageUserControl",
Url.StaticContent("images/Destination.jpg")); %>
</tr>
<tr>
Страница | 37
<% Html.RenderPartial("ImageUserControl",
Url.BlobStorageContent("images/Destination.jpg")); %>
</tr>
<tr>
<td></td>
<td class="content"><dl><dt>Estimated TTL</dt><dd
id="ttl"> </dd></dl></td>
</tr>
</table>
</asp:Content>
Примечание. Вставленные строки отображают исходное изображение в хранилище
больших двоичных объектов и оценку времени жизни (TTL) закэшированного изображения
в CDN. Необходимо включить Javascript в браузере для просмотра значения времени жизни.
Внимание! Прежде чем запустить решение на выполнение, убедитесь, что выбран
запускаемый проект, а начальная страница веб-проекта пуста.
Чтобы выбрать запускаемый проект, в обозревателе решений щелкните правой кнопкой
мыши проект CDNService и выберите Назначить запускаемым проектом. Чтобы задать
начальную страницу, в обозревателе решений щелкните правой кнопкой мыши проект
CDNSample и выберите пункт Свойства. В окне Свойства перейдите на вкладку Интернет
и в разделе Действие при запуске выберите параметр Указанная страница. Оставьте
значение этого поля пустым.
Страница | 38
15. Чтобы построить и запустить приложение в эмуляторе вычислений, нажмите клавишу F5.
Обратите внимание, что на странице оба изображения отображаются рядом,
а накладывающийся заголовок показывает текущее и исходное время, а также одинаковые
отметки времени. Верхнее изображение возвращено сетью доставки содержимого,
а нижнее соответствует исходному изображению в хранилище больших двоичных объектов.
Таймер Предполагаемое время жизни (TTL) отображает приближенное значение времени
жизни для изображения, закэшированного сетью доставки содержимого (CDN).
Рис. 36
Первоначальный запрос показывает, что содержимое, кэшируемое CDN,
соответствует большим двоичным объектам источника
Страница | 39
16. Обновите страницу в браузере. Обратите внимание, что обновленная отметка времени
отображается на изображении, полученном из службы больших двоичных объектов
(нижнее), в то время как изображение, возвращаемое из CDN (верхнее), по-прежнему
показывает исходную отметку времени. Кроме того, в таймере Предполагаемое время
жизни (TTL) отображается снижение времени жизни большого двоичного объекта,
кэшируемого сетью доставки содержимого.
Рис. 37
Запрос отображает, что CDN возвращает закэшированное содержимое
Примечание. Поскольку заголовком Cache-Control большого двоичного объекта,
содержащего изображение, определено время жизни в 30 секунд, CDN будет
возвращать закэшированные изображения до тех пор, пока не истечет срок действия.
17. Обновите страницу несколько раз, прежде чем таймер времени жизни (TTL) достигнет
нуля, чтобы убедиться в том, что изображение из CDN находится в кэше.
Примечание. Действие контроллера по отображению страницы вычисляет значение
времени жизни (TTL), отображаемое на этой странице. Но обратите внимание, что это
лишь приблизительная оценка, в конечном счете время жизни (TTL) закэшированного
большого двоичного объекта определяется моментом, когда браузер выполняет свой
первоначальный запрос к CDN для извлечения изображения. Значение выводится для
удобства пользователя, но и другие факторы также могут способствовать повышению
Страница | 40
задержки между моментом времени, когда сервер осуществляет вычисление,
и моментом, когда браузер отображает страницу, что может привести к несоответствиям.
Это значение используется просто как приблизительный индикатор.
18. В заключение дождитесь окончания времени жизни (TTL) и обновите страницу еще раз.
Обратите внимание, что, как только время жизни (TTL) истекло, после обновления
страницы оба изображения снова покажут одинаковую отметку времени, указывая на то,
что сеть доставки содержимого (CDN) произвела выборку изображения из хранилища
больших двоичных объектов и повторно поместила его в кэш.
Рис. 38
Ожидание окончания времени жизни большого двоичного объекта в кэше CDN
Задача 2. Признание содержимого в кэше CDN недействительным с помощью управления
версиями
Как правило, целесообразнее настраивать для редко изменяющихся ресурсов более
продолжительное время жизни (TTL). Но это может привести к возникновению проблем, если ресурс
необходимо обновить, а изменения сразу же распространить на клиентах. Содержимое, которое
хранится на пограничном сервере CDN, останется в его кэше в течение времени, заданного заголовком
Cache-Control большого двоичного объекта источника. Это означает, что клиенты, запрашивающие
этот ресурс, будут получать копию из кэша сервера до тех пор, пока не закончится время жизни
данного ресурса. Только после этого сервер извлечет обновленную копию из источника.
Страница | 41
Поскольку CDN кэширует содержимое на основе URL-адреса ресурса, то приложение может
получить обновленное содержимое за счет изменения URL-адреса таким образом, чтобы он
отличался от предыдущего.
В этой задаче изучается модификация этого метода, предполагающего добавление идентификатора
версии в строку запроса в URL-адрес. Для этого потребуется включить поддержку строки запроса
для конечной точки CDN.
1. На портале управления выберите вкладку Размещенные службы, учетные данные
хранилища и CDN и щелкните параметр CDN.
2. На средней панели выберите конечную точку CDN, созданную ранее для учетной записи
хранилища, и установите флажок в поле Строка запроса на ленте.
Рис. 39
Включение поддержки протокола HTTPS для конечной точки CDN
3. После включения поддержки строки запроса необходимо распространить изменения на
каждый из узлов сети доставки содержимого (CDN). Подождите как минимум 60 минут,
прежде чем продолжить выполнение следующих шагов, либо, если не хотите ждать,
перейдите к следующему упражнению. Позже можно будет вернуться к этой задаче и
завершить ее.
Страница | 42
4. Откройте файл IndexViewModel.cs в папке Models проекта CDNSample и добавьте
следующие (выделенные) свойства в класс.
(Фрагмент кода — Windows Azure CDN- Ex02 IndexViewModel versioning properties)
C#
public class IndexViewModel
{
public double TTL { get; set; }
public bool EnableCDNVersioning { get; set; }
public int Version { get; set; }
}
5. Затем откройте файл UrlHelperExtension.cs в папке Helpers. Найдите метод StaticContent
и замените его следующим (выделенным) кодом. Замените заполнитель [YOUR-BLOBSTORAGE-CDN-ENDPOINT] конечной точкой CDN для учетной записи хранилища, например
az12435.vo.msecnd.net. Обратите внимание, что новый код заменяет исходный метод
и создает дополнительную перегрузку.
(Фрагмент кода — Windows Azure CDN- Ex02 StaticContent method)
C#
public static class UrlHelperExtension
{
public static string StaticContent(this UrlHelper helper, string resource)
{
return StaticContent(helper, resource, 0);
}
public static string StaticContent(this UrlHelper helper, string resource,
int version)
{
return "http://[YOUR-BLOB-STORAGE-CDN-ENDPOINT]/content/" + resource +
((version > 0) ? "?" + version : "");
}
...
}
Примечание. Новая перегрузка метода StaticContent имеет новый параметр с именем
version, который добавляется к строке запроса в созданном URL-адресе. Обновляя
номер версии, приложение создает уникальные URL-адреса, которые позволят CDN
запрашивать обновленное содержимое из хранилища больших двоичных объектов.
Страница | 43
6. Откройте файл HomeController.cs в папке Controllers и добавьте следующий (выделенный)
метод в класс HomeController.
(Фрагмент кода — Windows Azure CDN- Ex02 InvalidateCache method)
C#
[HandleError]
public class HomeController : Контроллер
{
...
public ActionResult InvalidateCache(bool enabled)
{
HttpContext.Application["EnableCDNVersioning"] =
!(bool)(HttpContext.Application["EnableCDNVersioning"] ?? false);
TempData["InvalidatingCache"] = true;
return RedirectToAction("Index");
}
...
}
Примечание. Действие InvalidateCache включает управление версиями, которые
используются URL-адресами для доступа к ресурсам CDN. При каждом вызове этого
метода переключается состояние переменной EnableCDNVersioning приложения.
7. Далее найдите действие Индексировать и замените его текст следующим (выделенным)
кодом. Прежде чем это сделать, потратьте некоторое время на сравнение исходного кода
и просмотр изменений.
(Фрагмент кода — Windows Azure CDN- Ex02 Index method with versioning)
C#
[HandleError]
public class HomeController : Контроллер
{
const int IMAGE_TTL = 30;
public ActionResult Index()
{
if (TempData["InvalidatingCache"] == null)
{
UpdateBlob(DateTime.Now.ToLongTimeString(), IMAGE_TTL);
}
int version = (int)(HttpContext.Application["Version"] ?? 0);
bool enableCDNVersioning =
(bool)(HttpContext.Application["EnableCDNVersioning"] ?? false);
Страница | 44
if (enableCDNVersioning)
{
version++;
HttpContext.Application["Version"] = version;
}
DateTime lastRefreshed =
(DateTime)(HttpContext.Application["LastRefreshed"] ?? DateTime.MinValue);
DateTime currentTime = DateTime.Now;
double age = currentTime.Subtract(lastRefreshed).TotalSeconds;
if (age > IMAGE_TTL || enableCDNVersioning)
{
HttpContext.Application["LastRefreshed"] = currentTime;
age = 0;
}
IndexViewModel model = new IndexViewModel()
{
EnableCDNVersioning = enableCDNVersioning,
TTL = IMAGE_TTL - age,
Version = enableCDNVersioning ? version : 0
};
return View(model);
}
...
}
Примечание. Обновленный код с каждым запросом изменяет номер Версии ресурса
изображения в соответствии с новыми данными при условии, что установлен флаг
EnableCDNVersioning.
8. В заключение откройте представление Index.aspx в папке Views\Home приложения.
9. Найдите вызов метода StaticContent, который создает URL-адрес для изображения,
полученного из CDN, и добавьте дополнительный параметр Model.Version, чтобы
использовалась перегрузка этого метода с управлением версиями.
Рис. 40
Страница | 45
Добавление управления версиями в URL-адрес ресурсов CDN
10. Теперь в нижней строке элемента table вставьте следующую (выделенную) разметку
в первый столбец, определенный HTML-тегом td, как показано ниже.
(Фрагмент кода — Windows Azure CDN- Ex02 EnableCDNVersioning UI)
HTML
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
...
<table>
<tr>
<% Html.RenderPartial("ImageUserControl",
Url.StaticContent("images/Destination.jpg", Model.Version)); %>
</tr>
<tr>
<% Html.RenderPartial("ImageUserControl",
Url.BlobStorageContent("images/Destination.jpg")); %>
</tr>
<tr>
<td>
<label>Invalidate CDN Cache:</label>
<dd>
<%if (Model.EnableCDNVersioning)
{ %>
Yes | <%=Html.ActionLink("No", "InvalidateCache", new { enabled =
false }).ToString()%>
<%}
else
{ %>
<%=Html.ActionLink("Yes", "InvalidateCache", new { enabled = true
}).ToString()%> | No
<%} %>
</dd>
</td>
<td class="content"><dl><dt>Estimated TTL</dt><dd
id="ttl"> </dd></dl></td>
</tr>
</table>
</asp:Content>
Примечание. Вставленная разметка создает ссылку на включение функции управления
версиями CDN, выполняя действие InvalidateCache на контроллере.
Страница | 46
11. Чтобы построить и запустить приложение в эмуляторе вычислений, нажмите клавишу F5.
Обновите страницу несколько раз, чтобы удостовериться, что изображение кэшируется CDN.
12. Дождитесь истечения времени жизни (TTL), чтобы убедиться в том, что срок действия
изображения CDN еще не истек. При необходимости дождитесь истечения текущего
времени жизни (TTL), а затем обновите страницу.
13. Далее щелкните Признать недействительным кэш CDN, чтобы включить управление
версиями через URL-адрес, используемый для доступа к изображению. Обратите
внимание, что теперь URL-адрес изображения, загруженного из CDN, содержит параметр
запроса с номером версии, а изображение сразу же обновляется, чтобы соответствовать
изображению в хранилище больших двоичных объектов, даже несмотря на то, что
оставшееся время жизни пока не истекло. Это подтверждает, что благодаря уникальному
URL-адресу сеть доставки содержимого CDN вынуждена будет снова выполнить запрос
изображения из службы больших двоичных объектов.
Рис. 41
Признание кэша CDN недействительным с помощью URL-адреса ресурса с управлением
версиями
14. Обновите страницу несколько раз, обращая внимание на то, что каждый раз версия в URLадресе увеличивается, а изображение, полученное из CDN, во всех случаях синхронизировано
с большим двоичным объектом источника.
Примечание. Номер версии увеличивается с каждым запросом, наглядно показывая,
каким образом закэшированный ресурс становится недействительным. Как правило,
Страница | 47
нужно только выполнить обновление URL-адреса при изменении большого двоичного
объекта источника и признать недействительным кэш.
Упражнение 3. Кэширование
содержимого из размещенных служб
Ранее мы рассматривали содержимое, помещенное в хранилище больших двоичных объектов
и полученное по сети доставки содержимого CDN. Сеть доставки содержимого Windows Azure
также способна кэшировать содержимое, созданное размещенными службами, и распространять
это содержимое клиентам по всему миру с минимальной задержкой.
В предыдущих упражнениях опубликованное содержимое было получено из хранилища Windows
Azure, поэтому можно было пользоваться преимуществами кэширования CDN даже в том случае,
когда приложение работало локально в эмуляторе облака. В отличие от этого, для кэширования
содержимого из размещенных служб сеть доставки содержимого CDN должна сначала извлечь
это содержимое из приложения, что невозможно осуществить во время работы приложения
в эмуляторе облака на компьютере. Таким образом, для выполнения этого упражнения
необходимо опубликовать приложение на размещенной службе в Windows Azure, что позволит
осуществить проверку использования кэширования CDN.
Чтобы показать кэширование содержимого из размещенных служб, а не отображать изображение из
хранилища больших двоичных объектов, необходимо обновить домашнюю страницу, чтобы извлечь
изображение, обслуживаемое самим приложением, в результате одного из действий контроллера.
Изображения опять обрабатывается — на него накладывается заголовок, содержащий время
каждого запроса. В настоящее время сеть доставки содержимого CDN требует, чтобы содержимое
в размещенных службах, которое должно быть опубликовано, находилось в папке /cdn приложения.
Чтобы выполнить это требование, настраивается маршрут действия контроллера по созданию
изображение с отметкой времени — задается сопоставление действия с этим конкретным путем.
Примечание. Для выполнения этого упражнения потребуется размещенная служба и учетная
запись хранилища Windows Azure. Дополнительные сведения о приобретении подписки на
Windows Azure см. на странице http://www.microsoft.com/windowsazure/offers/.
Задача 1. Создание размещенной службы для приложения
В этой задаче для публикации приложения создается размещенная служба в подписке на
Windows Azure. Если планируется публикация приложения в существующей размещенной службе,
то можно пропустить эту задачу и перейти к следующей.
Страница | 48
1. Перейдите на портал управления Windows Azure и при необходимости войдите в систему
с учетными данными Windows Live ID.
2. На панели навигации перейдите на вкладку Размещенные службы, учетные данные
хранилища и CDN, выберите Размещенные службы и нажмите кнопку Создать
размещенную службу на ленте.
Рис. 42
Создание новой размещенной службы на портале Windows Azure
3. В диалоговом окне Создание новой размещенной службы при наличии несколько
подписок выберите ту, на которой будет создана размещенная служба для этого
практического задания.
4. Затем введите Имя службы и Префикс URL-адреса службы. По мере ввода в диалоговом
окне осуществляется проверка префикса URL-адреса и, если префикс недоступен,
выводится предупреждение.
5. Откройте раскрывающийся список Выбрать регион и укажите географический регион
создания службы.
6. И в заключение на панели Развертывание выберите параметр Не развертывать и нажмите
кнопку ОК.
Страница | 49
Рис. 43
Создание новой размещенной службы
Задача 2. Включение CDN для размещенной службы
В этой задаче выполняется включение сети доставки содержимого Windows Azure в размещенной
службе.
Страница | 50
1. В пользовательском интерфейсе портала управления перейдите на вкладку Размещенные
службы, учетные данные хранилища и CDN, выберите параметр CDN и нажмите кнопку
Создать конечную точку на ленте.
Рис. 44
Включение конечной точки CDN для размещенной службы
Страница | 51
2. В диалоговом окне Создание новой конечной точки CDN откройте раскрывающийся
список Выбор поставщика содержимого и выберите имя размещенной службы,
созданной в предыдущей задаче. Если учетная запись относится к нескольким подпискам,
то выберите ту из них, на которой создана служба. Установите флажки в полях Включить
CDN и Строка запроса (не устанавливайте флажок в поле HTTPS) и нажмите кнопку ОК.
Рис. 45
Создание новой конечной точки CDN
3. Прочтите сообщение и нажмите кнопку Закрыть, чтобы отклонить окно сообщения
Включить CDN.
Рис. 46
Подтверждение создания конечной точки CDN
Страница | 52
4. Может появиться следующее предупреждение о том, что в настоящее время в рабочей
среде размещенной службы развертывание не выполняется. Нажмите кнопку Да, чтобы
закрыть диалоговое окно и продолжить. Через некоторое время приложение будет
развернуто в размещенной службе.
Рис. 47
Предупреждающее сообщение об отсутствии развертывания
Страница | 53
5. После создания конечной точки CDN для отображения состояния операции обновляется
пользовательский интерфейс на портале управления.
Рис. 48
Состояние создания конечной точки CDN
Страница | 54
6. Дождитесь, пока состояние конечной точки CDN не изменится на Включено. На средней
панели выберите эту конечную точку и запомните значение Конечная точка HTTP по
умолчанию в окне Свойства. Впоследствии это значение понадобится для настройки
приложения.
Рис. 49
Окно свойств конечной точки CDN
Задача 3. Формирование динамического содержимого
В этой задаче выполняется обновление решения данной практической работы для отображения
изображения, которое создается приложением в одном из действий контроллера вместе с другим
изображением, которое также создано этим же действием контроллера, но источником которого
является конечная точка CDN для размещенной службы.
Страница | 55
1. Откройте Visual Studio с правами администратора, выбрав Пуск | Все программы |
Microsoft Visual Studio 2010, щелкнув правой кнопкой мыши пункт Microsoft Visual Studio
2010 и выбрав команду Запуск от имени администратора.
2. Если откроется диалоговое окно Контроль учетных записей, подтвердите продолжение
действия.
3. В меню Файл выберите пункт Открыть, затем щелкните Проект/Решение. В диалоговом
окне Открытие проекта в папке Source практической работы выберите Ex3HostedServiceCaching\Begin, укажите Begin.sln и нажмите кнопку Открыть. Кроме того,
можно перейти к решению, выполненному в ходе предыдущего упражнения.
Примечание. Если работа начинается с нового решения, настройте конечную точку CDN
в методе расширения StaticContent в файле UrlHelperExtension.cs папки Helpers.
4. Откройте файл HomeController.cs в папке Controllers приложения и вставьте следующее
действие контроллера в класс HomeController.
(Фрагмент кода — Windows Azure CDN- Ex03 GetImage action)
C#
public class HomeController : Контроллер
{
...
[OutputCache(VaryByParam = "", Duration = IMAGE_TTL, Location =
System.Web.UI.OutputCacheLocation.Downstream)]
public ActionResult GetImage()
{
string caption = DateTime.Now.ToUniversalTime().ToLongTimeString();
Stream output = new MemoryStream();
SaveImageToStream(output, caption);
output.Seek(0, SeekOrigin.Begin);
return new FileStreamResult(output, "image/jpeg");
}
...
}
Примечание. Действие контроллера GetImage считывает изображение с диска,
накладывает заголовок с текущим временем, а затем после установки типа содержимого
записывает в ответный поток двоичное содержимое изображения, указывая, что в ответе
содержится файл изображения.
Страница | 56
Атрибут OutputCache, который применяется к действию контроллера, следит за тем,
чтобы заголовок Cache-Control был задан надлежащим образом для определения
времени жизни ответа. Обратите внимание, что для задания этого значения, которое
в настоящее время равно 30 секундам, используется константа IMAGE_TTL.
5. Откройте файл UrlHelperExtension.cs в папке Helpers проекта CDNSample и добавьте
следующий (выделенный) метод к классу, заменив заполнитель [YOUR-HOSTED-SERVICECDN-ENDPOINT] значением поля Конечная точка HTTP по умолчанию, записанным при
выполнении предыдущей задачи во время включения CDN в размещенной службе,
например az12345.vo.msecnd.net.
(Фрагмент кода — Windows Azure CDN- Ex03 HostedServiceContent helper method)
C#
public static class UrlHelperExtension
{
...
public static string HostedServiceContent(this UrlHelper helper, string
resource, int version)
{
return "http://[YOUR-HOSTED-SERVICE-CDN-ENDPOINT]/" + resource + ((version
> 0) ? "?" + version : "");
}
}
Примечание. HostedServiceContent — это вспомогательный метод, который создает URLадрес для ресурса, обслуживаемого приложением и поставляемого сетью доставки
содержимого (CDN).
6. Откройте представление Index.aspx в папке Views\Home.
7. Найдите элемент table в элементе управления заполнителем Content2 и замените первые
две строки следующей (выделенной) разметкой.
Обратите внимание, что заменяется источник верхнего изображения, изначально
указывавший на конечную точку CDN в хранилище больших двоичных объектов с помощью
конечной точкой CDN размещенной службы, и источник нижнего изображения, изначально
указывавший на хранилище больших двоичных объектов с помощью URL-адреса действия
контроллера GetImage.
Страница | 57
(Фрагмент кода — Windows Azure CDN- Ex03 Image sources)
HTML
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<script type="text/javascript">
...
</script>
<table>
<tr>
<% Html.RenderPartial("ImageUserControl",
Url.HostedServiceContent("GetImage", Model.Version)); %>
</tr>
<tr>
<% Html.RenderPartial("ImageUserControl", Url.Action("GetImage")); %>
</tr>
...
</table>
</asp:Content>
Примечание. В обновленных строках отображаются изображение из CDN и его источник,
извлеченный непосредственно в результате действия контроллера GetImage приложения.
8. В заключение откройте файл Global.asax в проекте CDNSample, найдите метод
RegisterRoutes и добавьте следующий (выделенный) код для регистрации нового
маршрута, который сопоставляет путь /cdn/GetImage с контроллером Home.
(Фрагмент кода — Windows Azure CDN- Ex03 CDN route)
C#
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"CDN", // имя маршрута
"cdn/GetImage", // URL-адрес с параметрами
new { controller = "Home", action = "GetImage", id =
UrlParameter.Optional } // значения параметров по умолчанию
);
routes.MapRoute(
"Default", // имя маршрута
Страница | 58
"{controller}/{action}/{id}", // URL-адрес с параметрами
new { controller = "Home", action = "Index", id = UrlParameter.Optional
} // значения параметров по умолчанию
);
}
}
Примечание. Содержимое в размещенной службе, опубликованное с помощью CDN,
должно находиться в корневом каталоге /cdn приложения.
Задача 4. Публикация приложения в Windows Azure
В этой задаче осуществляется обновление строки подключения, чтобы она указывала на учетную
запись хранилища Windows Azure.
1. В обозревателе решений разверните узел Роли в облачном проекте CDNService и дважды
щелкните роль CDNSample.
2. В окне CDNSample [Role] перейдите на вкладку Параметры, найдите параметр
DataConnectionString и замените заполнитель [YOUR-ACCOUNT-NAME] на имя учетной записи
хранилища Windows Azure, а заполнитель [YOUR-ACCOUNT-KEY] — на его общий ключ.
Рис. 50
Настройка приложения для развертывания
3. Повторите предыдущий шаг для настройки учетных данных учетной записи хранилища для
параметра Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString. Эта учетная запись
хранилища используется для диагностики.
Страница | 59
4. Нажмите клавиши CTRL + S, чтобы сохранить изменения.
5. Опубликуйте приложение в размещенной службе, которая создана для выполнения этой
практической работы в первой задаче данного упражнения. Если ранее приложение не
развертывалось в Windows Azure, то подробное пошаговое руководство, описывающее эту
процедуру, см. в Приложение А. Публикация приложения в Windows Azure
Задача 5. Тестирование приложения в облаке
В этой задаче выполняется просмотр приложения, опубликованного в Windows Azure с целью
проверить кэширование содержимого сетью доставки содержимого, извлеченного в результате
действия контроллера.
1. Откройте окно браузера и перейдите по URL-адресу приложения на страницу
http://[yourservice].cloudapp.net, где [yourname] — это имя, выбранное при создании
размещенной службы.
Обратите внимание, что на странице показаны оба изображения рядом друг с другом
с наложенным заголовком, отображающим отметку времени. Таймер Предполагаемое
время жизни (TTL) отображает приближенное значение времени жизни для
изображения, закэшированного сетью доставки содержимого (CDN).
Примечание. Сеть доставки содержимого извлекает верхнее изображение в результате
действия контроллера перед кэшированием, тогда как браузер извлекает нижнее
изображение при обновлении страницы. Эти действия происходят в разное время,
следовательно, отметки времени на этих двух изображениях могут не совпадать, хотя
должны быть близки друг к другу.
Страница | 60
Рис. 51
Первоначальный запрос отображает содержимое, кэшируемое сетью доставки
содержимого и извлеченное из приложения
2. Обновите страницу в браузере.
Обратите внимание, что обновленная отметка времени отображается на изображении,
полученном в результате действия контроллера в приложении (нижнее), в то время как
изображение, возвращаемое сетью доставки содержимого (верхнее), по-прежнему
отображается с предыдущей отметкой времени. Кроме того, в таймере Предполагаемое
время жизни (TTL) отображается уменьшение времени жизни изображения,
закэшированного сетью доставки содержимого.
Страница | 61
Рис. 52
Запрос отображает, что CDN возвращает закэшированное содержимое
Примечание. Поскольку заголовком Cache-Control изображения задается значение
времени жизни 30 секунд, CDN продолжает возвращать закэшированные изображения,
пока не закончится срок его действия.
3. Обновите страницу несколько раз, прежде чем таймер времени жизни (TTL) достигнет
нуля, чтобы убедиться в том, что изображение из CDN находится в кэше.
Примечание. Действие контроллера по отображению страницы вычисляет значение
времени жизни (TTL), отображаемое на этой странице. Но обратите внимание, что это
лишь приблизительная оценка, в конечном счете время жизни (TTL) закэшированного
большого двоичного объекта определяется моментом, когда браузер выполняет свой
первоначальный запрос к CDN для извлечения изображения. Значение выводится для
удобства пользователя, но и другие факторы также могут способствовать повышению
задержки между моментом времени, когда сервер осуществляет вычисление,
Страница | 62
и моментом, когда браузер отображает страницу, что может привести к несоответствиям.
Это значение используется просто как приблизительный индикатор.
4. В заключение дождитесь окончания времени жизни (TTL) и обновите страницу еще раз.
Обратите внимание, что отметка времени обновляется для обоих изображений,
свидетельствуя об обновлении содержимого сетью доставки содержимого путем
повторного обращения к действию контроллера.
Рис. 53
Ожидание окончания времени жизни большого двоичного объекта в кэше CDN
5. Далее щелкните Признать недействительным кэш CDN, чтобы включить управление
версиями через URL-адрес, используемый для доступа к изображению. Обратите
внимание, что теперь URL-адрес изображения, загруженного из CDN, содержит параметр
запроса с номером версии и отметка времени верхнего изображения обновляется
незамедлительно.
Страница | 63
6. Обновите страницу несколько раз и обратите внимание, что каждый раз версия в URLадресе увеличивается, а отметка времени на изображении, полученном из CDN, всякий
раз обновляется. Это подтверждает, что благодаря уникальной строке запроса в URLадресе сеть доставки содержимого CDN будет вынуждена вновь выполнять запрос
изображения из размещенных служб.
Сводка
В ходе выполнения этой практической работы были рассмотрены методы, которые позволяют
использовать сеть доставки содержимого Windows Azure для передачи содержимого вебприложений из стратегических местоположений, обеспечивая максимальную пропускную
способность для пользователей. С помощью CDN было опубликовано содержимое, хранящееся
в учетной записи хранилища Windows Azure и созданное размещенной службой, рассмотрена
установка значения времени жизни (TTL) для управления длительностью возвращения
пограничным сервером CDN копии закэшированного ресурса перед запросом новой копии
из его источника. И в заключение была изучена методика, которая позволяет объявлять
недействительным содержимое в кэше CDN после обновления его источника.
Страница | 64
Приложение А. Публикация
приложения в Windows Azure
Visual Studio предусматривает два варианта публикации приложения в Windows Azure.

Создание только пакета служб

Публикация проекта Windows Azure в Windows Azure
При выборе первого варианта можно загрузить созданный пакет с помощью портала управления.
В следующем пошаговом руководстве описан второй вариант, где показано развертывание
приложения непосредственно из среды Visual Studio.
Задача 1. Настройка учетных данных API управления Windows Azure в среде Visual Studio
В этой задаче с помощью Visual Studio создается сертификат управления, который затем
загружается на портал Windows Azure. Описанная здесь процедура необходима для публикации
служб в Windows Azure непосредственно из среды Visual Studio. Ее достаточно выполнить один
раз. При наличии уже настроенных учетных данных для доступа к вашей подписке можно
пропустить эту задачу и перейти к следующей.
1. В обозревателе решений щелкните правой кнопкой мыши проект Windows Azure
и выберите пункт Опубликовать.
Примечание. Щелкните облачный проект Windows Azure, а не одну из его связанных
ролей.
2. В диалоговом окне Публикация проекта Windows Azure разверните раскрывающийся
список Подписка и выберите Управление.
Страница | 65
Рис. 54
Настройка учетных данных учетной записи Windows Azure
3. Будет выведено диалоговое окно для управления настройками проверки подлинности
Windows Azure. Чтобы задать параметры проверки подлинности, нажмите кнопку Создать.
Рис. 55
Добавление параметров проверки подлинности
Страница | 66
4. В диалоговом окне Проверка подлинности управления проектом Windows Azure
откройте раскрывающийся список Создать или выбрать существующий сертификат для
проверки подлинности, выберите один из существующих сертификатов или нажмите
кнопку Создать.
Примечание. Сертификат необходим для того, чтобы создать учетные данные для доступа
к подписке на Windows Azure. Если среде Visual Studio не удается подобрать подходящий
сертификат в хранилище личных сертификатов, будет предложено создать новый.
5. Если на предыдущем шаге вы решили создать сертификат, в диалоговом окне Создать
сертификат введите подходящее имя, которое позволит вам идентифицировать его,
например AzureMgmt, а затем нажмите кнопку ОК.
Рис. 56
Создание нового сертификата управления
Страница | 67
6. Вернитесь в диалоговое окно Проверка подлинности управления проектом Windows
Azure и выберите сертификат из раскрывающегося списка.
Рис. 57
Выбор сертификата для проверки подлинности
Примечание. В раскрывающемся списке содержатся все сертификаты, которые подходят
для проверки подлинности с помощью API управления Azure.
Страница | 68
7. Теперь щелкните ссылку Копировать полный путь, чтобы сохранить путь файла
сертификата открытого ключа в буфере обмена.
Рис. 58
Копирование пути к файлу сертификата, созданного Visual Studio, в буфер обмена
Примечание. Среда Visual Studio сохраняет файл открытого ключа для сертификата,
который создается во временной папке в локальном каталоге данных.
8. Нажмите кнопку ОК, чтобы закрыть окно сообщения с запросом на подтверждение,
а затем сохраните путь из буфера обмена в безопасное место. Вскоре это значение
понадобится при загрузке сертификата на портал.
Рис. 59
Подтверждение, что путь к файлу был успешно скопирован в буфер обмена
Страница | 69
9. Затем в диалоговом окне Проверка подлинности управления проектом Windows Azure
перейдите по ссылке Портал Windows Azure, чтобы открыть окно браузера и перейти на
портал управления.
Рис. 60
Переход на портал управления Windows Azure в браузере
Страница | 70
10. На портале управления войдите в систему с идентификатором Windows Live ID, если это
еще не было сделано.
11. Выберите параметр Размещенные службы, учетные записи хранилища и CDN, щелкните
Сертификаты управления, а затем нажмите кнопку Добавить сертификат на ленте.
Рис. 61
Добавление нового сертификата управления в подписку
12. В диалоговом окне Добавление нового сертификата управления нажмите кнопку Обзор,
введите в качестве имени файла путь к файлу сертификата открытого ключа (.cer),
созданного Visual Studio, который был ранее скопирован в этой задаче в буфер обмена,
а затем нажмите кнопку Открыть. Чтобы загрузить сертификат на портал управления,
нажмите кнопку ОК.
Рис. 62
Загрузка сертификата API на портал управления
Страница | 71
13. Выберите подписку, в которую добавлен сертификат управления, и на панели Свойства
скопируйте идентификатор подписки в буфер обмена. Он понадобится на следующем шаге.
Рис. 63
Извлечение идентификатора подписки из портала управления
Страница | 72
14. Чтобы завершить настройку учетных данных, вернитесь в диалоговое окно Проверка
подлинности управления проектом Windows Azure в Visual Studio и вставьте значение
идентификатора подписки, полученного на портале управления, в соответствующее
текстовое поле.
Рис. 64
Ввод идентификатора подписки на Windows Azure
Страница | 73
15. В заключение введите имя для идентификации учетных данных, например
MyWindowsAzureAccount, и нажмите кнопку ОК.
Рис. 65
Сохранение учетных данных Windows Azure
Страница | 74
16. После подтверждения создания новых учетных данных Visual Studio использует их для
доступа к службе управления для проверки подлинности указанных вами сведений
и выводит уведомление, если эта проверка завершилась неуспешно. Если такое
произошло, проверьте введенную информацию, убедитесь, что загружен правильный
сертификат на портал управления, а затем повторите операцию.
Рис. 66
Сбой проверки подлинности при доступе к службе управления
Страница | 75
17. В диалоговом окне Параметры управления проектом Windows Azure отображаются недавно
созданные параметры проверки подлинности. Чтобы вернуться в мастер публикации,
нажмите кнопку Закрыть. Процесс публикации будет продолжен в следующей задаче.
Рис. 67
Управление параметрами проверки подлинности
Задача 2. Настройка удаленного рабочего стола
В этой задаче рассматривается включение доступа к удаленному рабочему столу для экземпляров
роли размещенной службы. Эту задачу выполнять не обязательно.
1. В обозревателе решений щелкните правой кнопкой мыши проект Windows Azure
и выберите пункт Опубликовать.
Примечание. Щелкните облачный проект Windows Azure, а не одну из его связанных ролей.
2. В диалоговом окне Публикация приложения Windows Azure выберите учетные данные,
созданные в предыдущей задаче, и нажмите кнопку Далее.
Страница | 76
Рис. 68
Выбор учетных данных для подключения к подписке на Windows Azure
3. На вкладке Общие параметры установите флажок в поле Включить удаленный рабочий
стол для всех ролей. Будет отображено диалоговое окно Конфигурация удаленного
рабочего стола.
4. В диалоговом окне Конфигурация удаленного рабочего стола нажмите кнопку
Дополнительные параметры.
5. Откройте раскрывающийся список Создание или выбор сертификата для шифрования
учетных данных пользователя и нажмите Создать.
Примечание. При наличии ранее созданного сертификата для шифрования учетных
данных пользователя удаленного рабочего стола можно выбрать этот сертификат.
6. В диалоговом окне Создание сертификата введите имя для идентификации сертификата,
например AzureRemote, а затем нажмите кнопку ОК.
Страница | 77
Рис. 69
Создание сертификата для соединения с удаленным рабочим столом
7. Вернитесь в диалоговое окно Конфигурация удаленного рабочего стола, выберите из
раскрывающегося списка вновь созданный сертификат, введите имя пользователя,
которое будет использоваться для удаленного подключения к роли, — это может быть
любое имя на ваш выбор. Введите пароль и подтвердите его. При необходимости можно
указать дату окончания действия учетной записи.
Рис. 70
Настройка параметров удаленного рабочего стола
Страница | 78
8. Прежде чем закрыть диалоговое окно, нажмите кнопку Просмотр, расположенную рядом
с раскрывающимся списком сертификатов. В диалоговом окне Сертификат перейдите на
вкладку Подробности и нажмите кнопку Копировать в файл для запуска Мастера
экспорта сертификатов.
Рис. 71
Экспорт сертификата удаленного рабочего стола
Страница | 79
9. Следуйте инструкциям мастера для экспорта сертификат в файл, выбрав параметр
экспортировать закрытый ключ. Сохраните результирующий файл в подходящее
местоположение на жестком диске. Вскоре этот файл нужно будет передать на портал
управления.
Рис. 72
Экспорт закрытого ключа сертификата
10. Нажмите кнопку ОК, чтобы закрыть диалоговое окно Конфигурация удаленного рабочего
стола.
Страница | 80
11. Вернитесь в пользовательский интерфейс портала управления, выберите параметр
Размещенные службы, учетные записи хранилища и CDN, щелкните Размещенные
службы, разверните узел размещенной службы на центральной панели и выберите узел
Сертификаты. Затем нажмите кнопку Добавить сертификат на ленте.
Рис. 73
Настройка сертификатов размещенной службы
Страница | 81
12. В диалоговом окне Загрузка сертификата X.509 нажмите кнопку Обзор и перейдите
в папку, где хранится созданный и экспортированный при настройке удаленного рабочего
стола сертификат, введите назначенный пароль, подтвердите его и нажмите кнопку ОК.
Рис. 74
Загрузка сертификата удаленного рабочего стола в службу
Задача 3. Публикация приложения в размещенной службе
В этой задаче приложение публикуется в пакет размещенной службы непосредственно из среды
Visual Studio.
1. В обозревателе решений щелкните правой кнопкой мыши облачный проект Windows
Azure и выберите пункт Опубликовать.
Примечание. Щелкните облачный проект Windows Azure, а не одну из его связанных
ролей.
2. В диалоговом окне Публикация приложения Windows Azure выберите учетные данные,
созданные в предыдущей задаче, и нажмите кнопку Далее.
3. На вкладке Общие параметры обратите внимание, что диалоговое окно заполняет
раскрывающийся список Размещенная служба сведениями обо всех службах,
настроенных в учетной записи Windows Azure. Выберите в этом списке размещенную
службу, в которой необходимо развернуть приложение.
4. Присвойте параметру Среда значение Рабочая, а параметру Конфигурация сборки ―
значение Освободить. Кроме того, установите параметр Конфигурация службы
в значение по умолчанию.
Страница | 82
Рис. 75
Общие параметры развертывания
5. Выберите вкладку Дополнительные параметры. Обновите Метку развертывания до
MyTodo и установите флажок в поле Добавить дату и время для идентификации
развертывания в пользовательском интерфейсе портала разработчика.
Страница | 83
6. Как и в случае со списком размещенных служб, диалоговое окно заполняет
раскрывающийся список Учетная запись хранилища всеми службами хранилища,
настроенными в учетной записи Windows Azure. Чтобы опубликовать службу, среда Visual
Studio сначала загружает пакет услуг в хранилище Azure, а затем публикует оттуда службу.
Выберите службу хранилища, используемую для этой цели, и нажмите кнопку Далее.
Рис. 76
Дополнительные параметры развертывания
Примечание. Несмотря на то что этот вопрос не рассматривается в данной практической
работе, параметр IntelliTrace позволяет вести подробные журналы трассировки
работающей в облаке службы, которые можно скачать на рабочий стол для выполнения
отладки предыстории. Это особенно ценно при поиске и устранении неполадок,
возникающих во время запуска роли. Обратите внимание, что для IntelliTrace требуется
платформа .NET Framework 4, которая доступна только в выпуске Visual Studio Ultimate.
Страница | 84
7. Просмотрите сводные данные. Если все в порядке, нажмите кнопку Опубликовать, чтобы
запустить процесс развертывания.
Рис. 77
Запуск развертывания
Примечание. В верхней части диалогового окна находится раскрывающийся список
«Целевой профиль». После настройки параметров развертывания можно сохранить их
в виде нового профиля, а затем использовать его позже, чтобы не заполнять заново все
поля.
Страница | 85
8. Если выбранный слот занят предыдущим развертыванием, то Visual Studio отобразит
предупреждение и запросит подтверждение перед его заменой. Нажмите кнопку
Заменить, если вы уверены, что в текущем развертывании больше нет необходимости
и его можно перезаписать. В противном случае нажмите кнопку Отменить и повторите
операцию, выбрав другой слот развертывания.
Рис. 78
Перезапись существующего развертывания
9. После запуска развертывания можно просмотреть окно журнала активности Windows
Azure для определения состояния операции. Если это окно не отображается, в меню Вид
выберите пункт Другие окна, а затем Журнал активности Windows Azure.
10. По умолчанию в журнале отображается сообщение с описанием и индикатор выполнения,
показывающий состояние операции развертывания.
Рис. 79
Просмотр сводных данных в журнале активности Windows Azure
Страница | 86
11. Чтобы просмотреть подробные сведения о выполняемой операции развертывания,
дважды щелкните зеленую стрелку в левой части записи журнала активности.
Обратите внимание, что представленная дополнительная информация включает слот
развертывания, Рабочий или Промежуточный, URL-адрес веб-сайта, Идентификатор
развертывания и Журнал, отображающий изменения состояния, в том числе время
выполнения каждого изменения.
Рис. 80
Просмотр подробных сведений об операции развертывания
12. Дождитесь завершения операции развертывания, которая может занять несколько минут.
При выполнении развертывания отслеживать состояние развертывания можно на панели
Журнал, которая находится с правой стороны. При успешном развертывании она должна
напоминать следующую последовательность.
Рис. 81
Журнал операций развертывания
Страница | 87
13. По завершении операции развертывания в Журнале активности Windows Azure перейдите
по ссылке URL-адрес веб-сайта для завершенной операции, чтобы открыть приложение
в браузере и убедиться в его надлежащей работе. Обратите внимание, что в условных
обозначениях об авторских правах в нижней части страницы указывается, что это версия,
развертываемая с помощью среды Visual Studio.
Рис. 82
Запуск приложения, развертываемого с помощью Visual Studio
Страница | 88
Download