2012-03-28 143 views
2

下面添加了更正:相關代碼不是IIS 7應用程序(無應用程序池)的一部分。訪問UNC路徑時出現ASP.NET「訪問被拒絕」錯誤

我有,包括用下面的代碼aspx頁的IIS虛擬目錄:

System.Net.WebRequest wr = System.Net.WebRequest.Create(@"file://unc-share/directory/file.pdf"); 
wr.Credentials = System.Net.CredentialCache.DefaultCredentials; 
WebResponse response = wr.GetResponse(); 

當的GetResponse()被調用時,我得到一個「拒絕訪問路徑「\ UNC共享\目錄\ file.pdf'被拒絕。「錯誤。

我的應用程序配置爲集成Windows身份驗證(所有其他身份驗證類型都被禁用),ASP.NET模擬已啓用。

我已經能夠驗證ASP.NET模擬是否使用與我用來訪問該站點的Windows域帳戶相同的標識。 UNC共享文件所在的位置,這是一個獨立的Windows系統,不託管Web服務器,該位置爲該同一帳戶設置了「完全控制」權限。

我也嘗試使用FileStream實例訪問文件,結果相同。

在這個網站和其他人的這個問題上一直在挖掘,但沒有找到任何與我正在嘗試做什麼相匹配的建議,也沒有找到解決問題的方法。

任何想法?

回答

2

訪問這樣的路徑:

System.IO.File.ReadAllText(@"\\uncshare\directory\file.pdf"); 

這段代碼的重要組成部分,是路徑的格式和不存在的WebRequest的。有幾種方法可以用來打開文件。我以File.ReadAllText爲例,但您可以使用FileStream輕鬆打開文件。

應該不需要使用WebRequest,因爲該文件不在Web服務器後面。

+0

澄清:該文件可能是一個文本文件,但它通常不會是 - pdf,docx,各種其他非文本格式。此外,該文件位於遠程系統上,可通過UNC路徑訪問。無論如何,我最終需要的是將流傳遞給不同的應用程序,而不是文件的內容。而且,即使使用文本文件,ReadAllText也會拋出相同的錯誤。 – Hoobajoob 2012-03-28 21:08:57

+0

@hoobajoob,我以'ReadAllText'爲例。例如,您可以將'ReadAllBytes'用於二進制文件或使用閱讀器打開文件。我想這並不重要,因爲你得到的是同樣的錯誤。您是否可以通過在服務器中鍵入開始>運行對話框來訪問UNC路徑? – 2012-03-28 21:50:28

+0

是的,我測試過的UNC路徑可以從服務器訪問。 – Hoobajoob 2012-03-28 22:07:41