Как правило, целесообразнее настраивать для редко изменяющихся ресурсов более продолжительное время жизни (TTL). Но это может привести к возникновению проблем, если ресурс необходимо обновить, а изменения сразу же распространить на клиентах. Содержимое, которое хранится на пограничном сервере CDN, останется в его кэше в течение времени, заданного заголовком Cache-Control большого двоичного объекта источника. Это означает, что клиенты, запрашивающие этот ресурс, будут получать копию из кэша сервера до тех пор, пока не закончится время жизни данного ресурса. Только после этого сервер извлечет обновленную копию из источника. Поскольку CDN кэширует содержимое на основе URL-адреса ресурса, то приложение может получить обновленное содержимое за счет изменения URL-адреса таким образом, чтобы он отличался от предыдущего. В этой задаче изучается модификация этого метода, предполагающего добавление идентификатора версии в строку запроса в URL-адрес.  Для этого потребуется включить поддержку строки запроса для конечной точки CDN. На портале управления выберите вкладку Размещенные службы, учетные данные хранилища и CDN и щелкните параметр CDN. На средней панели выберите конечную точку CDN, созданную ранее для учетной записи хранилища, и установите флажок в поле Строка запроса на ленте. Рис. 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">&nbsp;</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. Кэширование содержимого из размещенных служб

НЕ нашли? Не то? Что вы ищете?
Ранее мы рассматривали содержимое, помещенное в хранилище больших двоичных объектов и полученное по сети доставки содержимого CDN. Сеть доставки содержимого Windows Azure также способна кэшировать содержимое, созданное размещенными службами, и распространять это содержимое клиентам по всему миру с минимальной задержкой. В предыдущих упражнениях опубликованное содержимое было получено из хранилища Windows Azure, поэтому можно было пользоваться преимуществами кэширования CDN даже в том случае, когда приложение работало локально в эмуляторе облака. В отличие от этого, для кэширования содержимого из размещенных служб сеть доставки содержимого CDN должна сначала извлечь это содержимое из приложения, что невозможно осуществить во время работы приложения в эмуляторе облака на компьютере. Таким образом, для выполнения этого упражнения необходимо опубликовать приложение на размещенной службе в Windows Azure, что позволит осуществить проверку использования кэширования CDN. Чтобы показать кэширование содержимого из размещенных служб, а не отображать изображение из хранилища больших двоичных объектов, необходимо обновить домашнюю страницу, чтобы извлечь изображение, обслуживаемое самим приложением, в результате одного из действий контроллера. Изображения опять обрабатывается — на него накладывается заголовок, содержащий время каждого запроса. В настоящее время сеть доставки содержимого CDN требует, чтобы содержимое в размещенных службах, которое должно быть опубликовано, находилось в папке /cdn приложения. Чтобы выполнить это требование, настраивается маршрут действия контроллера по созданию изображение с отметкой времени — задается сопоставление действия с этим конкретным путем. Примечание.  Для выполнения этого упражнения потребуется размещенная служба и учетная запись хранилища Windows Azure. Дополнительные сведения о приобретении подписки на Windows Azure см. на странице http://www. /windowsazure/offers/.

Задача 1. Создание размещенной службы для приложения

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8