保持与 Microsoft Azure Files 的连接
Azure Files 的相关信息,说明了如何申请预览版并开始使用,还介绍了一些有助于创建共享和传输数据的工具。本文章将重点阐述如何才能创建与 Azure File共享的持久连接,以便您的计划任务、应用程序或已登录用户在
VM重新启动后仍可以使用该共享。
Windows IaaS VM
默认情况下,Windows在重新启动过程中会尝试保持到
SMB共享的连接。但是,系统在此过程中不会自动保存 Azure Files凭据,因此,重新启动后系统将无法重新连接到
Azure Files共享。保存这些凭据的方法多种多样,以下详细介绍了其中的几种方法。
保存凭据
CmdKey
要建立持久连接,最简单的方法是使用“CmdKey”命令行实用程序将您的存储帐户凭据保存到
Windows 中。以下是一个把您的存储帐户凭据保存到 VM中的命令行示例:
C:\>cmdkey/add:<yourstorageaccountname>.file.core.chinacloudapi.cn/user:<yourstorageaccountname> /pass:<YourStorageAccountKeyWhichEndsIn==>
Note:yourstorageaccountname is not yourlive id but the name in the endpoint.
借助 CmdKey,您还可以列出系统存储的凭据:
C:\>cmdkey /list
Currently stored credentials:
Target:Domain:target=filedemo.file.core.chinacloudapi.cn
Type:DomainPassword
User:filedemo
保存凭据后,以后在连接到共享时将不再需要提供这些凭据。也就是说,无需指定任何凭据,您就能连接:
C:\>net use * \\filedemo.file.core.chinacloudapi.cn\demo1
Drive Z:is now connected to\\filedemo.file.core.chinacloudapi.cn\demo1.
The command completed successfully.
然后,您可以重新启动 VM(此操作将断开与
VM 的连接):
shutdown –t 0 –r
VM重新启动并重新连接后,您可以打开另一个命令窗口来确认是否已自动重新连接:
C:\>net use
New connections will be remembered.
Status Local Remote Network
-----------------------------------------------------------------------------
OK Z: \\filedemo.file.core.chinacloudapi.cn\demo1
Microsoft Windows Network
The command completed successfully.
凭据管理器
您还可以借助凭据管理器(位于“控制面板”\“用户帐户”下)来保存存储帐户凭据。
用户上下文
Windows会为在 VM上运行的每个用户维护不同的上下文,有时同一时间在同一
VM上运行的同一用户的上下文会有所不同。每个上下文均可独立连接到一组不同的 SMB共享,并且每个上下文都有自己的映射到所连接共享的盘符。
由 CmdKey保存的凭据可供运行“CmdKey”的用户使用。同样,由“net
use”记住的连接可供运行 net use的用户使用。因此,如果您的应用程序会在不同的用户名下运行,您可能还希望为其他用户保存凭据和连接。要执行此操作,您可以使用“runas”命令:
runas /user:<username> cmd.exe
此命令将打开一个新的命令窗口。命令窗口的标题将显示为“cmd.exe (running as COMPUTERNAME\username)”。如果在此命令窗口中运行“net
use”,您会看到此用户未连接到任何共享:
C:\>net use
New connections will be remembered.
There are no entries in the list.
您可以针对该用户按上所述运行“CmdKey”和“net
use”,为其保存您的存储凭据以及与 Azure File的连接。
管理员上下文
如果您在 VM上创建了一个新的本地用户,并将此用户添加到了管理员组,您可以在提升和非提升上下文中运行此用户的命令。提升和非提升上下文中的连接并不共享,因此您可能会希望通过执行“net
use”在各自的上下文中单独进行连接。但是,保存的凭据是共享的,因此您仅需在其中一个上下文中运行“CmdKey”即可。
处理计划任务
您可以创建在任何 VM用户下运行的计划任务,并且这些计划任务能够使用该用户通过
CmdKey建立的持久凭据。但是,这些计划任务可能会在此登录用户以外的其他用户上下文中运行,因此与 SMB共享的连接不会在运行该任务的用户上下文中自动重新连接。
例如,如果您创建的计划任务运行调用“net use”的脚本并将输出写入到本地文件,而此用户先前已与
Azure File 共享创建持久连接,还具有该共享的持久凭据,则输出将包含以下内容:
Status Local Remote Network
-----------------------------------------------------------------------------
UnavailableZ: \\filedemo.file.core.chinacloudapi.cn\demo1
Microsoft Windows Network
The command completed successfully.
但是,该上下文中的凭据可以重新连接到共享。因此,如果向您的脚本添加以下命令,则将重新建立网络连接:
net use z:\\filedemo.file.core.chinacloudapi.cn\demo1
或者,您的脚本可以使用完整的 UNC路径(而不是已映射的盘符)访问文件:
dir \\filedemo.file.core.chinacloudapi.cn\demo1
另外还要注意,由于计划任务不在登录用户所处的环境中运行,因此由该计划任务创建的连接可能不会在此环境中建立。
Windows PaaS角色
PaaS角色的功能与持久连接恰好相反。对于
PaaS角色,无论系统是否启动了全新的实例,还是重新启动了您的实例,都要确保您的代码可以自动进行连接。
对WNetAddConnection2进行平台调用
您可以通过对WNetAddConnection2进行平台调用来映射
PaaS角色启动代码中的盘符。以下代码声明了一组建立从 Azure Files共享到本地盘符的映射所需的结构。
[DllImport("Mpr.dll",
EntryPoint ="WNetAddConnection2",
CallingConvention = CallingConvention.Winapi)]
privatestaticexternint
WNetAddConnection2(NETRESOURCElpNetResource,
string
lpPassword,
string
lpUsername,
System.UInt32 dwFlags);
[DllImport("Mpr.dll",
EntryPoint ="WNetCancelConnection2",
CallingConvention = CallingConvention.Winapi)]
privatestaticexternint
WNetCancelConnection2(string lpName,
System.UInt32 dwFlags,
System.Boolean fForce);
[StructLayout(LayoutKind.Sequential)]
privateclass
NETRESOURCE
{
publicint
dwScope;
public
ResourceType dwType;
publicint
dwDisplayType;
publicint
dwUsage;
publicstring
lpLocalName;
publicstring
lpRemoteName;
publicstring
lpComment;
publicstring
lpProvider;
};
publicenum
ResourceType
{
RESOURCETYPE_DISK = 1,
};
然后,您可以编写一个用于在给定盘符上挂载共享的方法:
publicstaticvoid
MountShare(string shareName,
string
driveLetterAndColon,
string
username,
string
password)
{
if(!String.IsNullOrEmpty(driveLetterAndColon))
{
//确保我们未使用此盘符进行其他映射
WNetCancelConnection2(driveLetterAndColon, 0,true);
}
NETRESOURCE nr =new
NETRESOURCE();
nr.dwType = ResourceType.RESOURCETYPE_DISK;
nr.lpRemoteName = shareName;
nr.lpLocalName = driveLetterAndColon;
int
result =WNetAddConnection2(nr, password, username, 0);
if
(result != 0)
{
thrownew
Exception("WNetAddConnection2failed with error " +result);
}
}
然后,可以从您角色的“OnStart()”方法中调用此方法:
MountShare("\\\\filedemo.file.core.chinacloudapi.cn\\demo1",
"z:",
"filedemo",
"<YourStorageAccountKeyWhichEndsIn==>");
从此时起,一直到 Worker Role,您都能够使用盘符或完整
UNC 路径读取文件并将其写入到 Azure File共享:
File.Create("z:\\WNetAddConnection2.txt");
File.Create(\\\\filedemo.file.core.chinacloudapi.cn\\demo1\\UNC.txt);
Web Role和用户上下文
Azure Web Role的
OnStart()方法不在用于显示网站页面的用户上下文中运行。因此,如果希望从显示页面的代码中引用您的 Azure Files共享,您应该将上述代码放在
Global.Application_Start()方法,而不是WebRole.OneStart()中。
Linux VM
Linux具有多种在启动过程中自动挂载共享的方法,但是我们仅在
Ubuntu 14.04 LTS上对其中一种方法进行试验。
保持与 Fstab的连接
Linux的 /etc中有一个称为“fstab”的文件,该
/etc 在启动过程中可用于挂载驱动器和共享。在启动过程中自动挂载 Azure Files共享的一种方法是,向
/etc/fstab添加一行。应将以下文本放在文件中的一行:
//<yourstorageaccountname>.file.core.chinacloudapi.cn/demo1/home/azureuser/smb cifsvers=2.1,dir_mode=0777,file_mode=0777,username=<yourstorageaccountname>,password=<YourStorageAccountKeyWhichEndsIn==>
下表详细介绍了此行包含的各个部分:
部分 |
示例 |
描述 |
共享 URL |
//filedemo.file.core.chinacloudapi.cn/demo1 |
之前创建的 Azure Files共享的 |
挂载点 |
/home/azureuser/smb |
您之前创建以挂载共享的 Linux VM上空白目录的路径。 |
文件系统 |
Cifs |
要挂载的文件系统的类型。对于 Azure Files,其文件系统类型为“cifs”。 |
挂载参数 |
vers=2.1 |
要使用的 SMB版本,在本示例中为 |
dir_mode=0777 |
用于 Azure Files共享目录的权限掩码,在本示例中为完整权限。 |
|
file_mode=0777 |
用于 Azure Files共享文件的权限掩码,在本示例中为完整权限。 |
|
username=filedemo |
对于 Azure Files,此用户名必须为您的存储帐户名称。 |
|
password=StorageAccountKey== |
对于 Azure Files,此密码必须为您的完整存储帐户密钥。 |
您的 fstab文件中还可以包含许多其他选项。有关详细信息,请参阅您正在使用的
Linux版本的相关文档。
总结
我们之前发布的介绍
Azure Files 的文章和本文章集中介绍了帮助您创建到
Azure File 共享的持久连接的步骤,从而使您可以在重新启动后使用共享连接。我们始终乐于倾听您的反馈,请通过本博客和Azure
Storage MSDN论坛发表评论或发送电子邮件至mastoragequestions@microsoft.com。
Andrew Edwards
有关详细信息,请参阅以下链接:
Storage .NET Client Library 4.3.0
本文翻译自:
保持与 Microsoft Azure Files 的连接的更多相关文章
- Docker on Microsoft Azure
Docker蓬勃发展,如日中天.微软自然也不甘落后,且不说即将发布的.支持Docker技术的Windows Nano Server和Windows Server 2016.我们来看看在Microsof ...
- 使用VNET-to-VNET连接Microsoft Azure国际版和中国版
Microsoft Azure的VNET-to-VNET功能可以实现跨虚拟网络的VPN连接,通过VNET-to-VNET互联的两个虚拟网络可以在同一个订阅下或者隶属不同的订阅,而且可以跨数据中心.这实 ...
- 如何修复在Microsoft Azure中“虚拟机防火墙打开,关闭RDP的连接端口”问题
注:下列步骤并不一定适用所有场景,提供思路,请灵活应用 我们在使用Microsoft Azure 中Windows 虚拟机,有时会发生错误打开防火墙或一些管家软件错误的关闭了"远程桌面 ...
- Microsoft Azure Point to Site VPN替代方案
Microsoft Azure提供了Point to Site VPN,但有时候这并不能满足我们的需求,例如:Point to Site VPN是SSTP VPN,只能支持Window客户端拨入,而且 ...
- Microsoft Azure File 服务简介
我们非常高兴地宣布在微软Azure中国区推出 Microsoft Azure File 服务预览版.Azure File 服务使用标准 SMB 2.1 协议提供文件共享.Azure 中运行的应用程序现 ...
- Microsoft Azure Web Sites应用与实践【4】—— Microsoft Azure网站的“后门”
Microsoft Azure Web Sites应用与实践 系列: [1]—— 打造你的第一个Microsoft Azure Website [2]—— 通过本地IIS 远程管理Microsoft ...
- Microsoft Azure Web Sites应用与实践【2】—— 通过本地IIS 远程管理Microsoft Azure Web Site
Microsoft Azure Web Sites应用与实践 系列: [1]—— 打造你的第一个Microsoft Azure Website [2]—— 通过本地IIS 远程管理Microsoft ...
- Microsoft Azure 的负载平衡器的Session Sticky
Microsoft Azure 的负载平衡器是一种 Layer-4负载平衡器.Microsoft Azure 负载平衡器通过针对给定输入端点上接收到的流量计算哈希函数,在一组可用的服务器(虚拟机)之间 ...
- 新版Microsoft Azure Web管理控制台 - Microsoft Azure New Portal - (1)
国际版Microsoft Azure的Preview Portal已经于12月2日正式GA,现在登录国际版的Microsoft Azure,默认就会进入Microsoft Azure New Port ...
随机推荐
- 我爱工程化 之 gulp 使用(二)
上一篇 介绍了gulp的安装.环境等配置.基本使用,那么现在,我们快走进 速8,深入了解吧...... 一.各种安装.环境配置.插件安装(参考上一篇文章) 二.项目基本目录结构 三.编写 gulpf ...
- jQuery事件绑定和委托
可以用多种方法实现,on() . bind() . live() . delegate() ,还有one(). 有时我们可能会像下面这样绑定一个事件: $("#div1"). ...
- vs快捷键及常用设置(vs2012版)
vs快捷键: 1.ctrl+f F是Find的简写,意为查找.在vs工具中按此快捷键,可以查看相关的关键词.比如查找哪些页面引用了某个类等.再配合查找范围(整个解决方案.当前项目.当前文档等),可以快 ...
- 对Android中dp单位的理解
dp 设备独立像素 ,也叫dip, device independent pixle. 比如同样在1英寸大小的屏幕上,高密度的屏幕可显示100个像素点,而低密度的屏幕只能70个点. 用了dp之后,只要 ...
- Linux 源码的安装 3个步骤
http://www.oseye.net/question/96 源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install). Configure是一 ...
- 上传头像,界面无跳转,php+js
上传头像,界面无跳转的方式很多,我用的是加个iframe那种.下面直接上代码. html: //route 为后端接口//upload/avatar 为上传的头像的保存地址//imgurl=/uplo ...
- 大型B/S系统技术总结(不断更新)
看了<淘宝技术这十年>和<大型网站系统与Java中间件实践>这些书,对大型B/S系统的构建越来越感兴趣,于是尝试收集和总结一些常用的技术手段.不过大型网站的架构是根据业务需求不 ...
- Oracle wrap 测试的一些细节问题
今天在做 wrap 的测试实验的时候,出现一个很奇怪的现象,就是加密不成功.具体表现为:1.加密后的文件大小为0kb. 2.加密后的文件仍然可视. 具体测试步骤如下: D:\Just4work\som ...
- 最近在无线USB网卡投入比较大
第一次(40): 乐光N18网卡 17 5米USB延长线 10 DVD2 3 运费10 第二次(30): 8187L主板13 5DB/6DB全向天线 5 外壳FREE 运费12 第三次(20): 8D ...
- Iis load balance
http://www.agilesharp.com/u/yanyangtian/Blog.aspx/t-196 IIS负载均衡-Application Request Route详解第二篇:创建与配 ...