繁体   English   中英

MVC:File.exists返回false

[英]MVC : File.exists return false

我有这样的MVC方法:

public ActionResult DownloadDocument(string filePath){
   //Other stuff
   if (!System.IO.File.Exists(filePath))
   {
       FileLogger.Debug($"DownloadDocument : {filePath} NotFound");
   }
   //Other stuff
}

filePath看起来像=> \\\\ServerB\\Documents\\General\\Administration\\Doc1.pdf

在本地,我有一个IISExpress(我知道那不是很好,但别无选择...)和一个数据服务器(服务器B)。 文件在服务器B上。它的工作原理非常好,我可以检索文件。

发布时,我在服务器A和同一台数据服务器(服务器B)上都有一个IIS。 FilePath仍在服务器B上。在这种情况下,我无法检索文件,因为此行返回False:

System.IO.File.Exists(filePath)

在搜索解决方案时,我看到ServerMapPath,但是它没有帮助,因为filePath在服务器B而不是服务器A上。

当我将自己连接到服务器A时,如果在文件资源管理器中放置了\\\\ServerB\\Documents\\General\\Administration\\Doc1.pdf ,则可以正确检索文件。

也许这是一个安全问题,但不知道在哪里搜索...

谢谢您的帮助

这很可能是访问权限问题。 该文件夹确实存在,但是.NET无法确定,因为IIS用户无权访问网络共享。

您可以通过以网络用户(例如您自己的帐户)身份运行IIS应用程序池来进行检查。 不要在生产方案中这样做! 为IIS用户创建一个单独的域帐户。

尝试创建一个可以从服务器B访问文件的应用程序池。

Right-Click Application Pool > Advanced Settings

在此处输入图片说明

转到流程模型部分>身份>单击ApplicationPoolIdentity

从内置帐户。 选择>自定义帐户:>交易集>

设置凭据将弹出。 在此处输入图片说明

设置凭据并将“应用程序池”分配给服务器A上的应用程序。

确保用户凭证可以访问服务器B文件。

希望这会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM