2016-04-21 61 views
5

我正在使用Visual Studio 2010Crystal Report。它在我的本地服務器上工作正常,但在Web服務器上,它給出錯誤: System.Runtime.InteropServices.COMException: Invalid file name

我嘗試了許多解決方案,如把.rpt文件的任何文件夾中,並提供路徑,充分權限窗口的臨時文件夾,啓用父路徑形式IIS等

但他們沒有工作。請幫我解決這個問題。

我目前的路徑:System.Runtime.InteropServices.COMException:Crystal Report中的文件名無效

crystalReport.Load(Server.MapPath("~/PurchaseOrder1.rpt")); 


Crystal Report error

+0

什麼是使用Server.Mappath( 「〜/ PurchaseOrder1.rpt」)返回?它是文件的正確位置嗎?你有沒有通過NTFS給IIS_IUSERS文件的訪問權限? – JAZ

+0

@John,Server.MapPath是正確的,它在本地服務器上正常工作。讓我檢查IIS_IUSERS權限。 –

+0

即使在提供IIS_IUSERS權限後也出現同樣的錯誤。 –

回答

2

不是全部答案,但我太新,所以只是發表評論。您可以嘗試的一件事是下載Process Monitor並觀察Crystal試圖加載文件的位置,這可能會有所幫助。進程監視器將提供大量輸出,但可以對其進行過濾,例如文件名的一部分。它可能會告訴你是否有權限問題。我發現它對於這種情況下非常有用,你不能找出爲什麼找不到文件。

0

我的猜測是罪魁禍首可能是網絡服務器路徑上的尾隨/

使用Path.Combine(Server.MapPath("~"), "PurchaseOrder1.rpt");

試試這個應該把適當/路徑和可能解決您的問題。

+0

我試過了,仍然是一樣的錯誤。 –

0

我認爲與本地和服務器環境的主要區別在於IIS根目錄和應用程序所在的虛擬目錄。

我的意思是,如果該文件是在網站的根,你可能想使用

crystalReport.Load(Server.MapPath("/PurchaseOrder1.rpt"));

或者你可以嘗試把RPT文件到同一文件夾ViewPurchaseOrder.aspx而無需修改代碼

如果它不起作用,如果您可以共享路徑(物理和虛擬路徑),我們可以進一步檢查。

*編輯:使用服務器時。在MapPath

/返回站點根應用程序的

~/返回根目錄

不同的是,如果你的網站是:

http://yoursite.com 和你有一個應用程序,對wwwroot\somedir\app

所以在你的「應用程序」(http://yoursite.com/somedir/app

/應返回網站(http://yoursite.com

〜/根應退回申請(http://yoursite.com/somedir/)的根