我们在最近的博客文章中介绍了 Azure StorageFiles的预览版,请单击此处。该文章包含
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共享的
URL

挂载点

/home/azureuser/smb

您之前创建以挂载共享的 Linux VM上空白目录的路径。

文件系统

Cifs

要挂载的文件系统的类型。对于 Azure Files,其文件系统类型为“cifs”。

挂载参数

vers=2.1

要使用的 SMB版本,在本示例中为
2.1

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

有关详细信息,请参阅以下链接:

Azure Files 2014-04-14版本

Microsoft
Azure File服务简介

AzCopy

Storage .NET Client Library 4.3.0

本文翻译自:

http://blogs.msdn.com/b/windowsazurestorage/archive/2014/05/27/persisting-connections-to-microsoft-azure-files.aspx

保持与 Microsoft Azure Files 的连接的更多相关文章

  1. Docker on Microsoft Azure

    Docker蓬勃发展,如日中天.微软自然也不甘落后,且不说即将发布的.支持Docker技术的Windows Nano Server和Windows Server 2016.我们来看看在Microsof ...

  2. 使用VNET-to-VNET连接Microsoft Azure国际版和中国版

    Microsoft Azure的VNET-to-VNET功能可以实现跨虚拟网络的VPN连接,通过VNET-to-VNET互联的两个虚拟网络可以在同一个订阅下或者隶属不同的订阅,而且可以跨数据中心.这实 ...

  3. 如何修复在Microsoft Azure中“虚拟机防火墙打开,关闭RDP的连接端口”问题

     注:下列步骤并不一定适用所有场景,提供思路,请灵活应用 我们在使用Microsoft Azure 中Windows 虚拟机,有时会发生错误打开防火墙或一些管家软件错误的关闭了"远程桌面 ...

  4. Microsoft Azure Point to Site VPN替代方案

    Microsoft Azure提供了Point to Site VPN,但有时候这并不能满足我们的需求,例如:Point to Site VPN是SSTP VPN,只能支持Window客户端拨入,而且 ...

  5. Microsoft Azure File 服务简介

    我们非常高兴地宣布在微软Azure中国区推出 Microsoft Azure File 服务预览版.Azure File 服务使用标准 SMB 2.1 协议提供文件共享.Azure 中运行的应用程序现 ...

  6. Microsoft Azure Web Sites应用与实践【4】—— Microsoft Azure网站的“后门”

    Microsoft Azure Web Sites应用与实践 系列: [1]—— 打造你的第一个Microsoft Azure Website [2]—— 通过本地IIS 远程管理Microsoft ...

  7. Microsoft Azure Web Sites应用与实践【2】—— 通过本地IIS 远程管理Microsoft Azure Web Site

    Microsoft Azure Web Sites应用与实践 系列: [1]—— 打造你的第一个Microsoft Azure Website [2]—— 通过本地IIS 远程管理Microsoft ...

  8. Microsoft Azure 的负载平衡器的Session Sticky

    Microsoft Azure 的负载平衡器是一种 Layer-4负载平衡器.Microsoft Azure 负载平衡器通过针对给定输入端点上接收到的流量计算哈希函数,在一组可用的服务器(虚拟机)之间 ...

  9. 新版Microsoft Azure Web管理控制台 - Microsoft Azure New Portal - (1)

    国际版Microsoft Azure的Preview Portal已经于12月2日正式GA,现在登录国际版的Microsoft Azure,默认就会进入Microsoft Azure New Port ...

随机推荐

  1. 我爱工程化 之 gulp 使用(二)

    上一篇  介绍了gulp的安装.环境等配置.基本使用,那么现在,我们快走进 速8,深入了解吧...... 一.各种安装.环境配置.插件安装(参考上一篇文章) 二.项目基本目录结构 三.编写 gulpf ...

  2. jQuery事件绑定和委托

    可以用多种方法实现,on()  . bind()  . live()  . delegate() ,还有one(). 有时我们可能会像下面这样绑定一个事件: $("#div1"). ...

  3. vs快捷键及常用设置(vs2012版)

    vs快捷键: 1.ctrl+f F是Find的简写,意为查找.在vs工具中按此快捷键,可以查看相关的关键词.比如查找哪些页面引用了某个类等.再配合查找范围(整个解决方案.当前项目.当前文档等),可以快 ...

  4. 对Android中dp单位的理解

    dp 设备独立像素 ,也叫dip, device independent pixle. 比如同样在1英寸大小的屏幕上,高密度的屏幕可显示100个像素点,而低密度的屏幕只能70个点. 用了dp之后,只要 ...

  5. Linux 源码的安装 3个步骤

    http://www.oseye.net/question/96 源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install). Configure是一 ...

  6. 上传头像,界面无跳转,php+js

    上传头像,界面无跳转的方式很多,我用的是加个iframe那种.下面直接上代码. html: //route 为后端接口//upload/avatar 为上传的头像的保存地址//imgurl=/uplo ...

  7. 大型B/S系统技术总结(不断更新)

    看了<淘宝技术这十年>和<大型网站系统与Java中间件实践>这些书,对大型B/S系统的构建越来越感兴趣,于是尝试收集和总结一些常用的技术手段.不过大型网站的架构是根据业务需求不 ...

  8. Oracle wrap 测试的一些细节问题

    今天在做 wrap 的测试实验的时候,出现一个很奇怪的现象,就是加密不成功.具体表现为:1.加密后的文件大小为0kb. 2.加密后的文件仍然可视. 具体测试步骤如下: D:\Just4work\som ...

  9. 最近在无线USB网卡投入比较大

    第一次(40): 乐光N18网卡 17 5米USB延长线 10 DVD2 3 运费10 第二次(30): 8187L主板13 5DB/6DB全向天线 5 外壳FREE 运费12 第三次(20): 8D ...

  10. Iis load balance

    http://www.agilesharp.com/u/yanyangtian/Blog.aspx/t-196  IIS负载均衡-Application Request Route详解第二篇:创建与配 ...