Windows Azure Platform (十六)Windows Azure Drive
2012-03-22 12:03:57 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劎绮妵鍕箳鐎n亞浠鹃梺闈涙搐鐎氫即鐛崶顒夋晬婵絾瀵ч幑鍥蓟閻斿摜鐟归柛顭戝枛椤牆顪冮妶搴′簼缂侇喗鎸搁悾鐑藉础閻愬秵妫冮崺鈧い鎺戝瀹撲礁鈹戦悩鎻掝伀缁惧彞绮欓弻娑氫沪閹规劕顥濋梺閫炲苯澧伴柟铏崌閿濈偛鈹戠€n€晠鏌嶆潪鎷屽厡闁汇倕鎳愮槐鎾存媴閸撴彃鍓卞銈嗗灦閻熲晛鐣烽妷褉鍋撻敐搴℃灍闁绘挻娲橀妵鍕箛闂堟稐绨肩紓浣藉煐濮樸劎妲愰幘璇茬闁冲搫鍊婚ˇ鏉库攽椤旂》宸ユい顓炲槻閻g兘骞掗幋鏃€鐎婚梺瑙勬儗閸樺€熲叺婵犵數濮烽弫鍛婃叏椤撱垹纾婚柟鍓х帛閳锋垶銇勯幒鍡椾壕缂備礁顦遍弫濠氱嵁閸℃稒鍊烽柛婵嗗椤旀劕鈹戦悜鍥╃У闁告挻鐟︽穱濠囨嚃閳哄啰锛滈梺褰掑亰閸欏骸鈻撳⿰鍫熺厸閻忕偟纭堕崑鎾诲箛娴e憡鍊梺纭呭亹鐞涖儵鍩€椤掑啫鐨洪柡浣圭墪閳规垿鎮欓弶鎴犱桓闂佸湱枪閹芥粎鍒掗弮鍫熷仺缂佸顕抽敃鍌涚厱闁哄洢鍔岄悘鐘绘煕閹般劌浜惧┑锛勫亼閸婃牠宕濋敃鈧…鍧楀焵椤掍胶绠剧€光偓婵犱線鍋楀┑顔硷龚濞咃絿妲愰幒鎳崇喓鎷犻懠鑸垫毐闂傚倷鑳舵灙婵炲鍏樺顐ゆ嫚瀹割喖娈ㄦ繝鐢靛У绾板秹寮查幓鎺濈唵閻犺櫣灏ㄥ銉р偓瑙勬尭濡繂顫忛搹鍦<婵☆垰鎼~宥囩磽娴i鍔嶉柟绋垮暱閻g兘骞嬮敃鈧粻濠氭偣閸パ冪骇鐎规挸绉撮—鍐Χ閸℃ê闉嶇紓浣割儐閸ㄥ墎绮嬪澶嬪€锋い鎺嶇瀵灝鈹戦埥鍡楃仯闁告鍕洸濡わ絽鍟崐鍨叏濡厧浜鹃悗姘炬嫹

在开始此次教学之前,我强烈建议大家先学习Windows Azure中文博客:Windows Azure 入门教学系列(八),使用Windows Azure Drive。
入门教学的例子非常简单:Windows Azure平台提供了Drive的功能,就是把Windows Azure Blob Storage变成Azure 托管服务器的一个本地盘符(比如F盘),并且支持NTFS文件系统。也就是说应用程序可以利用现有的文件管理API(包含System.IO的类型)来访问Windows Azure Drive中的文件夹与文件数据,并且这些数据会保存在Windows Azure数据中心内。这样我们可以方便的把已有的Web应用程序快速迁移到Windows Azure平台之上而不需要做很大的改动。
在这里我还要强调一下Azure Drive的局限性:
1)Windows Azure Drive支持的Web Role Instance Count只有1个。如果有两个实例,并且要让两个实例共享一个"Azure Drive"的话,Windows Azure Drive将不能正常工作。因为对于同一个Blob同时只能有一个Web Role Mount。
2)Mount成功的Azure Drive,返回的本地盘符路径是随即的。也就是说,在部署完Windows Azure Drive Web App的托管服务,运行成功后相对于Windows Azure 云计算平台的本地盘符路径也许是F盘。但一旦重新部署了更新版本的托管服务,Windows Azure Drive也许就是G盘了。(当然微软提供了API可以查看所有Azure Drive)。
3)存入Azure Drive的二进制文件无法使用REST API来直接访问。
Windows Azure中文博客介绍的例子一次只能挂载上一个Azure Drive。如果我们已经写好的本地应用程序要访问多个Azure Drive应该怎么办?
幸运的是有一位叫jeff00seattle的外国网友写了一个XDrive.cs类库。方便我们一次创建多个Azure Drive,并且能设置Azure Drive的ContainerName, Drive的名称, Drive的磁盘大小和缓存的大小等。英语比较好的朋友可以直接浏览jeff00seattle的网站:点这里查看。
我在jeff00seattle开发的XDrive.cs类上做了一定的修改(因为他写的有个BUG,至于具体在哪里,我卖个关子,呵呵),大家可以在这里下载我修改后的XDrive.cs类。
接下来的内容我将向大家介绍如何使用XDrive挂载多个Azure Drive。
首先我们新建一个Azure Project,名称叫做MountDrive,添加一个Web Role(过程略)。
然后我们把XDrive.cs类复制到WebRole工程目录之下,并且添加对它的引用(过程略)。
1.修改WebRole.cs文件
打开WebRole工程,修改WebRole.cs的函数,具体如下
public class WebRole : RoleEntryPoint { private XDrives m_XDrive = new XDrives(); public override bool OnStart() { Trace.Listeners.Add(new DefaultTraceListener() { LogFileName = "webrole-trace.log" }); // 当用配置文件中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; // For information on handling configuration changes // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357. //挂载Azure Drive m_XDrive.MountXDrives(); return base.OnStart(); } private void RoleEnvironmentChanging(object sender, RoleEnvironmentChangingEventArgs e) { // If a configuration setting is changing if (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange)) { // Set e.Cancel to true to restart this role instance e.Cancel = true; } } public override void OnStop() { //卸载Azure Drive m_XDrive.UnmountXDrives(); base.OnStop(); } }
2.修改Global.asax.cs文件
打开Web Role下的Global.asax.cs,修改Application_Start()函数
private XDrives m_XDrive = new XDrives(); void Application_Start(object sender, EventArgs e) { //System.Diagnostics.Debugger.Break(); // Code that runs on application startup //读取XDrives的配置函数 m_XDrive.SetXDrivesEnvironmentVariable(); }
3.修改ServiceConfiguration.cscfg配置文件
选择MountDrive-->Roles-->WebRole-->右键-->属性
选择Settings,Service Configuration选择Cloud,然后点击Add Setting,步骤如下
1)添加Name为WindowsAzureStorageConnectionString(大小写必须一致),Type选择 Connection String,在Value里选择"...",然后再弹出窗口里输入Azure Storage Account Name和主访问密钥(辅助访问密钥)。因为之前一章我们已经创建了名为threestone的Azure Storage Account,所以我们输入相关信息。注意Connection选择Use default HTTP endpoints。
更多精彩
赞助商链接