Windows Azure Storage (10) Windows Azure 上的托管服务CDN (下) Hosted Service
《Windows Azure Platform 系列文章目錄》
?
使用Blob Service CDN需要將所有需要緩存的文件放入Blob Service中,然后設置CDN指向這個Storage Service。但是大部分情況下,特別是在進行網站開發的情況下,使用的圖片一般都是放在網站目錄下而非Blob Service中。雖然可以將這些文件遷移到Blob中,但是在開發的時候還是需要使用本地文件,實際操作起來還是比較費時費力的。另外,基于Blob Service的CDN只能緩存靜態文件,如果應用程序需要緩存一些動態的內容,比如緩存某個頁面的輸出該怎么辦呢?為了解決上述問題,Windows Azure平臺提供了基于Hosted Service的CDN服務。
我將會給大家介紹如何使用Windows Azure平臺上的Hosted Service。
首先,我們打開Visual Studio 2012,新建一個Cloud Solution,命名為AzureCDN。添加一個ASP.NET的Web Role。
然后在Web Role Project下增加,添加一個名為"CDN"的文件夾(大小寫不敏感)。在這個文件夾里我們先增加1張圖片Moon,然后增加文件夾msft,在msft文件夾里增加3張圖片。
請注意:Windows Azure Hosted CDN服務將使“/cdn”文件夾下所有內容啟用CDN。我們必須把所有需要CDN服務的內容(圖片,css,文檔等)復制到cdn文件夾里。
然后我們打開項目中的Default.aspx頁面。添加2個image控件:分別為imgBlob和imgCDN。圖片的來源分別指向Azure Storage Blob中和CDN Url。
然后我們在Default.aspx.cs的Page_Load函數里,增加如下代碼:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Microsoft.WindowsAzure.ServiceRuntime;namespace WebRole1 {public partial class _Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){imgBlob.ImageUrl = RoleEnvironment.GetConfigurationSettingValue("imgBlobURL");imgCDN.ImageUrl = RoleEnvironment.GetConfigurationSettingValue("imgCDNURL");}} }主要的功能是:從ServiceConfiguration.cscfg里讀取相關的圖片超鏈接信息,然后加載到imgBlob和imgCDN控件。
然后我們修改WebRole.cs中的代碼,具體內容如下:
using System; using System.Collections.Generic; using System.Linq; using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.Diagnostics; using Microsoft.WindowsAzure.ServiceRuntime; using System.Diagnostics;namespace WebRole1 {public class WebRole : RoleEntryPoint{public override bool OnStart(){// For information on handling configuration changes// see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.// 當用配置文件中ConfigurationSettings時必須調用CloudStorageAccount.SetConfigurationSettingPublisher// 來說明當配置文件在發布后被更改時將采取何種操作CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>{configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));RoleEnvironment.Changed += (sender, arg) =>{if (arg.Changes.OfType<RoleEnvironmentConfigurationSettingChange>().Any((change) => (change.ConfigurationSettingName == configName))){if (!configSetter(RoleEnvironment.GetConfigurationSettingValue(configName))){RoleEnvironment.RequestRecycle();}}};});RoleEnvironment.Changing += RoleEnvironmentChanging;return base.OnStart();}private void RoleEnvironmentChanging(object sender, RoleEnvironmentChangingEventArgs e){// If a configuration setting is changingif (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange)){// Set e.Cancel to true to restart this role instancee.Cancel = false;}}} }這些代碼的主要功能是:如果CSCFG發生變化的時候將e.Cancel設置為False,不需要重啟Web Role。
然后我們修改CSCFG的配置信息,增加imgCDNURL和imgBlobURL,Value分別是圖片的http website。我使用上一章已經上傳成功的圖片WindowsAzure.png。
注意:如果對讀取Azure配置文件不熟悉的網友,請參考我的這篇文章Windows Azure Platform (十四) Configuration的變更和通知機制
然后我們使用Visual Studio發布這個Azure Solution,服務名稱和Url都使用LeiAzureCDN,WebSite的發布過程略。
發布成功后,我們瀏覽發布成功的Azure Website:http://leiazurecdn.cloudapp.net/。圖片加載成功,效果如下:
實際上加載的2張圖片都是來自于Azure Blob, url為?http://threestone.blob.core.windows.net/gallery/WindowsAzure.png,我們暫時還未使用Azure Hosted Service CDN服務。
?
那我們開始配置Azure Hosted Service CDN的功能。首先登陸Windows Azure Management Portal:
然后我們選擇"CDN"-->選中"LeiAzureCDN"(我們之前創建的托管站點)-->選擇"新建終結點":
在彈出的"新建CDN終結點里",
1.啟用CDN:啟用或不啟用CDN。
2.HTTPS:如果我們需要使用HTTPS連接,選中它。
3.查詢字符串:如果我們緩存托管服務內容或使用查詢字符串來指定被恢復的內容,選中它。
CDN新建終結點成功后如下圖。請注意觀察LeiAzureCDN的CDN HTTP終結點地址是http://az274005.vo.msecnd.net
等待20分鐘......讓CDN在全世界傳播
(20分鐘后...)我們使用已經發布成功的LeiAzureCDN的HTTP終結點是:http://az274005.vo.msecnd.net
請注意觀察AzureCDN這個Cloud Solution Web Role根目錄下的CDN的文件夾內容:
- 發布成功的CDN url是http://[yourcdnurl]/[yourfilename]。
- 我們發布成功的CDN url是http://az274005.vo.msecnd.net。另外moon.jpg是在CDN根目錄下,那真正的url就是http://az274005.vo.msecnd.net/moon.jpg
- 對于CDN\msft里的圖片來說,真正的url就是http://[YourCdnUrl]/[YourFileName]。對于msft里的WindowsAzure.png來說,CDN URL就是http://az274005.vo.msecnd.net/WindowsAzure.png
?
我們修改AzureCDN的配置部署,修改imgCDNURL的value為CDN URL,我們修改加載CDN\msft\wp7.jpg的圖片
?然后我們用IE重新打開http://leiazurecdn.cloudapp.net/,頁面加載的時候會重新讀取最新的cscfg內容:
?
轉載于:https://www.cnblogs.com/threestone/archive/2012/06/11/2542076.html
總結
以上是生活随笔為你收集整理的Windows Azure Storage (10) Windows Azure 上的托管服务CDN (下) Hosted Service的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转载]常用CASE工具介绍
- 下一篇: idea 新建一个spring项目