簡體   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