Рис. 39 Включение поддержки протокола HTTPS для конечной точки CDN После включения поддержки строки запроса необходимо распространить изменения на каждый из узлов сети доставки содержимого (CDN). Подождите как минимум 60 минут, прежде чем продолжить выполнение следующих шагов, либо, если не хотите ждать, перейдите к следующему упражнению. Позже можно будет вернуться к этой задаче и завершить ее. Откройте файл 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; } } Затем откройте файл UrlHelperExtension. cs в папке Helpers. Найдите метод StaticContent и замените его следующим (выделенным) кодом. Замените заполнитель [YOUR-BLOB-STORAGE-CDN-ENDPOINT] конечной точкой CDN для учетной записи хранилища, например az12435.vo. . Обратите внимание, что новый код заменяет исходный метод и создает дополнительную перегрузку. (Фрагмент кода — 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 запрашивать обновленное содержимое из хранилища больших двоичных объектов. Откройте файл 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 приложения. Далее найдите действие Индексировать и замените его текст следующим (выделенным) кодом. Прежде чем это сделать, потратьте некоторое время на сравнение исходного кода и просмотр изменений. (Фрагмент кода — 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); if (enableCDNVersioning) { version++; HttpContext. Application["Version"] = version; } DateTime lastRefreshed = (DateTime)(HttpContext. Application["LastRefreshed"] ?? DateTime. MinValue); DateTime currentTime = DateTime. Now; double age = btract(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. В заключение откройте представление Index. aspx в папке Views\Home приложения. Найдите вызов метода StaticContent, который создает URL-адрес для изображения, полученного из CDN, и добавьте дополнительный параметр Model. Version, чтобы использовалась перегрузка этого метода с управлением версиями.
Рис. 40 Добавление управления версиями в URL-адрес ресурсов CDN Теперь в нижней строке элемента 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 на контроллере. Чтобы построить и запустить приложение в эмуляторе вычислений, нажмите клавишу F5. Обновите страницу несколько раз, чтобы удостовериться, что изображение кэшируется CDN. Дождитесь истечения времени жизни (TTL), чтобы убедиться в том, что срок действия изображения CDN еще не истек. При необходимости дождитесь истечения текущего времени жизни (TTL), а затем обновите страницу. Далее щелкните Признать недействительным кэш CDN, чтобы включить управление версиями через URL-адрес, используемый для доступа к изображению. Обратите внимание, что теперь URL-адрес изображения, загруженного из CDN, содержит параметр запроса с номером версии, а изображение сразу же обновляется, чтобы соответствовать изображению в хранилище больших двоичных объектов, даже несмотря на то, что оставшееся время жизни пока не истекло. Это подтверждает, что благодаря уникальному URL-адресу сеть доставки содержимого CDN вынуждена будет снова выполнить запрос изображения из службы больших двоичных объектов.
Рис. 41 Признание кэша CDN недействительным с помощью URL-адреса ресурса с управлением версиями Обновите страницу несколько раз, обращая внимание на то, что каждый раз версия в URL-адресе увеличивается, а изображение, полученное из CDN, во всех случаях синхронизировано с большим двоичным объектом источника. Примечание. Номер версии увеличивается с каждым запросом, наглядно показывая, каким образом закэшированный ресурс становится недействительным. Как правило, нужно только выполнить обновление URL-адреса при изменении большого двоичного объекта источника и признать недействительным кэш. Упражнение 3. Кэширование содержимого из размещенных служб
НЕ нашли? Не то? Что вы ищете?
Задача 1. Создание размещенной службы для приложения
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 |


