参考:将 Azure 文件服务 CloudFileShare 映射为每个云服务实例上的虚拟目录
我尝试在 Azure 云服务中创建虚拟目录时遇到问题,并且虚拟目录映射到 Azure 文件服务。
我做了什么
1)<Runtime executionContext="elevated" />
在 ServiceDefinition.csdef 中用于 webrole
2)在 WebRole.cs 我安装驱动器(如http://blogs.msdn.com/b/windowsazurestorage/archive/2014/05/27/persisting-connections-to-microsoft-azure-files.aspx中所述PaaS)我也在应用程序启动时这样做。
public static void MountShare(string shareName,
string driveLetterAndColon,
string username,
string password)
{
if (!String.IsNullOrEmpty(driveLetterAndColon))
{
// Make sure we aren't using this driveLetter for another mapping
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 || result != 85)
//85 indicates the drive name is already used. in this scenario, it means the drive is already mapped.
{
throw new Exception("WNetAddConnection2 failed with error " + result);
}
}
3) 在 WebRole.cs 中,我通过以下方式创建虚拟目录,
app.VirtualDirectories.Add("/asset/cms", @"s:\cms");
4) 在 WebRole.cs 中,我使用以下内容使 AppPool 在我为远程桌面创建的管理员帐户中运行,
applicationPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser;
applicationPool.ProcessModel.UserName = appPoolUser;
applicationPool.ProcessModel.Password = appPoolPass;
applicationPool.ProcessModel.LoadUserProfile = true;
问题:
我无法从 /asset/cms 得到任何东西。如果我尝试访问其中的文件,它会返回 500.19 ,并显示“无法访问请求的页面,因为该页面的相关配置数据无效。',特别是它指向不存在的 s:\cms\web.config。当我远程访问云服务实例并打开 IIS mgr 时,我可以看到虚拟目录已正确创建。
估计是权限问题。但我无法编辑虚拟目录的权限,因为它已映射到网络驱动器。
我怎么解决这个问题?-- 现在上述问题解决了,云服务可以访问文件服务共享了。但是,新问题 - 是否可以使用 network_service 身份来运行 AppPool?