保持与 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 ...
随机推荐
- Visual Stuido 2015 Community 使用 GitHub 插件
微软在Visual Studio 2015产品中,深度整合了GitHub,让VS用户更方便的使用GitHub的服务. 新闻链接: Announcing the GitHub Extension for ...
- 创建安全的ashx文件,ashx编译
<%@ WebHandler Language="C#" Class="Handler2" %> using System; using Syste ...
- prefix和unprefix
exports._esModule = true; exports.default = { prefix: function prefix(prop){ if (prop[0] === '-'){ v ...
- 机器学习实战:数据预处理之独热编码(One-Hot Encoding)
问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male", "female"] ["from ...
- hdu 1695 GCD 莫比乌斯反演入门
GCD 题意:输入5个数a,b,c,d,k;(a = c = 1, 0 < b,d,k <= 100000);问有多少对a <= p <= b, c <= q <= ...
- C#中的socket编程方法
服务器: 第一步,准备socket套接字:Socket sockfd = new Socket(AddressFamily.InterNetwork,SocketType.Stream,Protoco ...
- MaskedTextBox控件实现输入验证
Mask属性可以验证用户在文本中输入数据的格式 this.maskedTextBox1.Mask = "000000-00000000-000A";//身份证号码18位 this. ...
- 使用grub硬盘重装ubuntu
电脑一直是双系统,Windows8 + Ubuntu13.04,昨天瞎搞,更新了一下QT,结果就不能开机了...真心难. 老系统坏了也好,正好可以装个Ubuntu14.04LTS.手边没有U盘,可以把 ...
- 一步步学习NHibernate(1)——NHibernate介绍
请注明转载地址:http://www.cnblogs.com/arhat 第十五章 从本章开始,老魏将给大家一起学习NHibernate这个流行的ORM框架,本来老魏想要和大家一起探讨微软的EF框架的 ...
- Google Code Jam 2014 Qualification 题解
拿下 ABD, 顺利晋级, 预赛的时候C没有仔细想,推荐C题,一个非常不错的构造题目! A Magic Trick 简单的题目来取得集合的交并 1: #include <iostream> ...