2013-05-30 71 views
0

看着很多話題,我決定問這個.NET WCF服務無法訪問本地文件

我有一個WCF服務,讀取本地文件系統中的文件後。當服務在我的電腦上進行本地測試時,這樣做不成問題。

但是,當我在IIS8發佈服務我收到此錯誤

該系統找不到指定的文件

我試圖創建一個使用該標識的新用戶和新ApplicationPool運行該服務,並且完全控制正在嘗試讀取的文件夾,但問題仍然存在。

我也曾嘗試甚至使用管理員作爲新的應用程序池的身份,但並沒有解決問題,或者

我失去了什麼?

+0

從錯誤它看起來像文件路徑可能不正確。嘗試檢查服務是否配置了正確的路徑。 – Igarioshka

+0

您是否嘗試將ApplicationPoolIdentity設置爲ApplicationPoolIdentity並在此處發佈結果。 – Saravanan

+0

由於託管網站對系統資源的訪問權限有限,因此使用相同虛擬目錄的這些文件會更好。 – Saravanan

回答

0

假設您有一個相對URL並且運行該應用程序的帳戶具有適當的權限,那麼您可能無法獲得文件的正確路徑名。

你可以嘗試這樣的事情找到你的文件的完整路徑:

using System.IO; 

public FileInfo GetFileInfo(string filename) 
{ 
    if(filename == null) 
     throw new ArgumentNullException("filename"); 


    FileInfo info = new FileInfo(filename); 

    if(!Path.IsPathRooted(filename) && !info.Exists) 
    { 
     string[] paths = { 
        Environment.CurrentDirectory, 
        AppDomain.CurrentDomain.BaseDirectory, 
        HostingEnvironment.ApplicationPhysicalPath, 
        }; 

     foreach(var path in paths) 
     { 
      if(path != null) 
      { 
       string file = null; 
       file = Path.Combine(path, filename); 

       if(File.Exists(file)) 
       { 
        return new FileInfo(file); 
       } 
      } 
     } 
    } 

    throw new FileNotFoundException("Couldn not find the requested file", filename); 
} 

它返回的System.IO.FileInfo實例,但你可以很容易地適應它返回一個字符串(全路徑名)。

+0

我沒有使用相對名稱我正在使用完整路徑 –