【问题标题】:Access mapped drive by IIS running asp.net mvc web application通过运行 asp.net mvc web 应用程序的 IIS 访问映射驱动器
【发布时间】:2016-02-15 15:05:00
【问题描述】:

我在虚拟机(Windows server 2012 R2)内的 IIS 8 服务器上部署了一个 asp.net mvc Web 应用程序。 在此虚拟机 Windows server 2012 R2 中,将一个 azure 文件存储映射为网络驱动器。 现在我的 asp.net mvc web 应用程序需要通过 C# System.IO 代码读取这个映射驱动器的文件和文件夹。默认情况下不允许 IIS 访问映射的驱动器。

这就是 Web 应用程序抛出 System.IO 异常的原因

"找不到指定的路径Z:\"

。我也试过通过"\\\\{storage-name}.file.core.windows.net\\{fileshare-name} 但仍然没有成功。

谁能指导我正确的配置和设置,我应该在 IIS 和 Web 应用程序中进行哪些操作?

【问题讨论】:

  • "默认情况下不允许 IIS 访问映射的驱动器。"谁说的? IIS 只是一个软件......允许或不允许访问资源的人是该执行软件背后的身份。
  • @AdrianSalazar 微软这么说。

标签: c# asp.net asp.net-mvc azure iis


【解决方案1】:

最后,我成功通过 IIS Server 访问了映射的网络驱动器。 我执行了以下步骤。

  • 在 VM 上创建一个新用户帐户。
  • 此新帐户的用户名将是存储帐户名称
  • 此用户的密码将是 存储帐户密钥,以“=="
  • 结尾
  • 创建此新用户帐户后,我将此用户的帐户类型更改为 Administrator
  • 转到我的电脑这台电脑
  • Map network drive.. 选项的帮助下附加网络驱动器。
  • 打开 IIS 管理器窗口,转到 应用程序池
  • 选择您的 Web 应用程序正在使用的应用程序池(在我的情况下,它是 DefaultAppPool,然后单击右侧窗格中的 高级设置...
  • 使用新创建的用户帐户名和密码更改此应用程序池的身份
  • 加载用户配置文件设置为true
  • 单击“确定”保存更改。
  • 单击右侧窗格中的回收链接以刷新选定的应用程序池。
  • 现在选择 Default We Site 下的 Web 应用程序。
  • 点击基本设置...打开编辑站点对话框。
  • 确保应用程序池名称正确。
  • 点击 Connect as... 按钮并选择 Specific user 单选按钮,然后使用这个新创建的用户名(存储帐户名)和密码(存储帐户密钥)。

就是这样。现在您可以简单地编写标准 C# IO 代码来访问映射驱动器的目录和文件。这是一个示例。

var allDirs = Directory.GetDirectories("\\\\<storageaccountname>.file.core.windows.net\\<storagefileshare>");
ViewBag.Items = allDirs;

确保您仅通过 UNC 路径格式访问文件和文件夹,就像我在上面的代码中所做的那样。

【讨论】:

  • 我个人认为这是一种危险的方法,您使用 ApplicationPools 是有原因的。出于安全原因,对 Web 应用程序使用管理员帐户通常是不可行的。如果要执行任何恶意代码,那么您可以清除服务器。
  • 嗨@Kishan Gupta,它帮了我很多。就我而言,我只是将用户类型从“管理员”更改为“标准用户”,它也可以工作。因此,对于我的项目,我可以跳过这一步:“创建此新用户帐户后,我将此用户的帐户类型更改为管理员”谢谢
猜你喜欢
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
  • 2016-01-10
  • 2012-09-25
  • 2015-07-08
  • 2013-12-07
  • 2012-02-07
相关资源
最近更新 更多