2010-07-20 70 views
2

我在IIS6中設置了虛擬目錄。這映射到共享的網絡驅動器。Server.MapPath()返回與DirectoryInfo一起使用時不存在的路徑

我可以用

string mappedPath = HttpContext.Current.Server.MapPath(path); 

然後創建一個DirectoryInfo對象,因爲我想在目錄中查找某些文件正確映射路徑。

DirectoryInfo updateDirectory = new DirectoryInfo(mappedPath); 

但是那麼updateDirectory.Exists是錯誤的?我可以從mappedPath中取出字符串並將其複製到開始 - >運行中以便到達路徑,以便我知道它存在。我使用集成的Windows身份驗證對Web服務進行身份驗證,並擁有所需文件夾的權限。

有沒有什麼明顯的我在代碼中缺少?或者這是純粹的IIS設置和配置等?

+0

你也可以發佈mappedPath的確切輸出或值嗎?我認爲,它可能存在一些問題。@Adam,他說,他已經使用Start-> Run驗證了它。 – Kangkan 2010-07-20 11:58:49

+0

@Adam:是的,我可以手動驗證它,如上所述 – 2010-07-20 11:59:50

+0

@Kangkan:輸出是「\\\\ someserver \\ somepath」,這是正確的,但存在,但是當我創建一個DirectoryInfo對象時,它返回False for Exists屬性。 – 2010-07-20 12:01:24

回答

2

根據此鏈接:

http://bytes.com/topic/asp-net/answers/471616-server-mappath-virtual-directories

Server.MapPath對虛擬目錄使用時不會給期望的輸出。

如果是服務器的權限,並且您使用Windows身份驗證,請確保您有這個在你的配置:

<identity impersonate="true" /> 

的DirectoryInfo返回出錯條件錯誤:如果文件夾不存在;你沒有權限;或者它是一個斷開的網絡文件夾。

聽起來像你的ASP.NET工作進程對我的權限 - 模擬將解決這個問題。

+0

很好地訣竅,謝謝。 – 2010-07-20 12:13:01

+0

酷,所以我可以記住一些做ASP.NET的東西! Windows身份驗證應用於當前用戶主體,但您需要手動提升「工作進程」。 – 2010-07-20 12:14:22

4

您需要檢查您的服務工作流程帳戶是否具有該文件夾的訪問權限。 AFAIK Windows身份驗證不會爲工作進程帶來模擬,因此它可能與Windows acct不同。 或者(只是爲了證明帳戶問題),您可以使用您的帳戶運行應用程序池以查看問題是否會消失。

相關問題