微软Azure的Storage套件中提供了新的服务File Service,让我们运行在Azure中的程序都能共享存储,一个存储账号共享的没有上线,但每个共享的上限是5G。由于File Service采用了SMB2.1协议,所以对我们来说,存储是透明的,可以直接使用盘符路径的形式来对文件进行存储。例如.Net平台中System.IO.File。
下面简单介绍一下本次使用File Service的过程。另外,File Service是支持Linux的,不过这次是部署在Windows上面的。
准备存储账号
Azure中存储账号
建立File Service共享
通过File Service的API在一个存储账号中建立一个共享
可以直接使用微软提供的Sample建立共享,地址https://github.com/Azure-Samples
中国Azure提供的服务地址与微软默认的地址不一样,所以在配置文件中需要修改,可以在这里找到区别https://msdn.microsoft.com/zh-cn/library/azure/dn578439.aspx
挂载File Service共享
进入VM控制台,添加网络凭证
Cmdkey /add:<yourstorageaccountname>.file.core.chinacloudapi.cn /user:<yourstorageaccountname> /pass:<YourStorageAccountKeyWhichEndsIn==>
可以查看网络凭证是否保存成功
cmdkey /list
保存网络凭证是为了在VM重启后自动挂载共享
挂载共享
net use * \\filedemo. file.core.chinacloudapi.cn\demo1
demo1是刚才通过API建立的共享
挂载成功后可以在文件浏览器中看到
至此,File Service已经成功挂载在VM中,其他的细节包括如何在Web以及WebRole、WorkRole中挂载存储共享可以参考这篇文章
目前在VM中,我们可以写一些程序RUN起来,直接像使用本地磁盘一样使用File Service,例如
不过有个问题,如果我们要在VM的IIS网站中访问,会报错。原因我想大家也很清楚,权限问题,IIS运行的账户和我们挂载共享的账户不是同一个。
在抹黑探索了一番之后,终于让IIS能够访问文件共享。就其本质实际上是和我们原来搭建网络文件共享一样,不过在云端我们无法看见具体的机器,是很抽象的,所以我们只有假象为主,实践为主。
以前在IIS中访问网站物理目录以外的本地目录,我们通常都使用虚拟目录,同样,如果我们有网络目录挂载在本机中,也是可以使用虚拟目录来访问,这里实际上是一样的。2台物理机器同样使用Windows系统,IIS在A机器中,共享文件夹在B机器中,在B机器分配一个用户并文件夹的使用权限赋予该用户,在A机器中挂载B机器的文件夹共享,配置A机器的IIS,增加虚拟目录并使用该账户登录。
这里实际上也是同样的道理,不过有些细节不一样。
可以把我们的VM想象成A机,而文件共享是B机。
为VM创建账户
这里创建的账户名称必须和Azure的存储账户名称相同,密码也是存储账号的访问密钥
设置IIS应用程序池标识
在IIS的应用程序池中找到该网站使用的APP,右键属性高级设置里设置其标识,输入刚才创建的账户名及密码
创建虚拟目录
创建虚拟目录,虚拟目录的地址请使用挂载共享使用的地址
点击这里 选择特定用户的设置,将刚才创建的账户名以及密码输入即可。
将File Service看做一台物理机的话,那么存储账户就是在其上面创建的账户,在自己的VM这边输入账户凭证即可。
在.NET中我们现在可以通过HttpContext.Current.Server.MapPath方法来获取真实的物理路径并对文件进行存储而不需要关注其具体位置了。