从Intranet App中的远程驱动器读取文件

时间:2016-08-13 18:37:20

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

我想从网络共享上与某些参数匹配的文件夹中读取pdfs的文件名,并提供链接以在我的模型的详细信息页面上查看它们。我需要的只是文件名。我现在不需要任何文件管理/读/写。

如果我有路径,我可以在浏览器中显示.pdf(IE将打开" file://"链接)。我缺少的部分是在运行时从远程(但同一个域)目录获取文件名。

我们已经为应用程序设置了一个虚拟目录,如果已解析的物理文件夹位于同一台服务器上,那么过去该工作正常,但情况并非如此。

我已经尝试过模拟,但这似乎无法正常工作,因为我仍然无法获取访问权限错误。

我意识到这可能是一个安全问题,这也是为什么不允许这样做的原因,但是是否需要设置IIS配置或其他途径以允许此操作?我似乎找不到只打开目录阅读的代码的方法。

我通常可以从虚拟目录中的一个文件中读取某些信息的示例代码:

// This example code is inside a controller action, so Server refers to HttpContextBase
var path = Server.MapPath("~/MyVirtualDirectory/" + fileName);
var fileExists = System.IO.File.Exists(path);
var fileLastModified = System.IO.File.LastWriteTime(path);

要枚举目录中的匹配文件,我使用了DirectoryInfo

var pdfFileNames = new List<string>();
var dir = new DirectoryInfo(Server.MapPath("~/VirtualDirectory/"));
var pdfs = dir.EnumerateFiles("*.pdf");
foreach (var pdf in pdfs) 
{
    pdfFileNames.Add(pdf.Name);
}

正如我所提到的,当物理文件夹位于同一台服务器上时,这些方法可以正常工作,但是一旦目录位于远程驱动器上,它就不再起作用了。我有权打开所需的目录,我的同事说他给了虚拟目录和服务器相应的权限。不知道还有什么可以尝试。

编辑:现在它正在运行,我使用虚拟目录显示文件

http://server/appName/virtualDirectory/pdfFileName

1 个答案:

答案 0 :(得分:1)

默认情况下,IIS应用程序池在名为IIS APPPOOL \ [NameOfYourAppPool]的特定本地Windows标识下运行。这是本地用户,无法授予此标识权限以访问位于其他计算机上的资源。

如果两个服务器都在同一个域中,您可以尝试以下解决方案:

  • 在域用户下运行IIS应用程序,并向此域用户授予所需权限。
  • 在NetworkService标识下运行IIS应用程序,并将权限授予IIS服务器的DOMAIN \ MACHINENAME $帐户。