WEB开发网
开发学院服务器云计算 Windows Azure Platform (十六)Windows Azure Dri... 阅读

Windows Azure Platform (十六)Windows Azure Drive

 2012-03-22 12:03:57 来源:WEB开发网   
核心提示:在开始此次教学之前,我强烈建议大家先学习Windows Azure中文博客:Windows Azure 入门教学系列(八),Windows Azure Platform (十六)Windows Azure Drive,使用Windows Azure Drive,入门教学的例子非常简单:Windows Azure平台提供

在开始此次教学之前,我强烈建议大家先学习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。

1 2  下一页

Tags:Windows Azure Platform

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接