Windows Azure Platform (十六)Windows Azure Drive
2012-03-22 12:03:57 来源:WEB开发网
在开始此次教学之前,我强烈建议大家先学习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。
更多精彩
赞助商链接