2012-04-23 130 views
4

我上傳了我的WebApplication。我的應用程序在VS2008中使用Crystal Reports 2008 sp3。 我上傳了並行叢服務器。我在Bin文件夾中添加了所有必需的水晶報告Dll。我的報告路徑也是正確的。Crystal Report「文件名無效」。問題

我收到的錯誤是

Line 41:   ReportDocument myreport = new ReportDocument(); 
Line 42:   string reportPath = Server.MapPath("~/CrystalReport.rpt"); 
Line 43:   myreport.Load(reportPath); 
Line 44: 
Line 45:   myreport.SetDataSource(ds); 


[COMException (0x800001fb): Invalid file name.] 
    CrystalDecisions.ReportAppServer.ClientDoc.ReportClientDocumentClass.Open(Object& DocumentPath, Int32 Options) +0 
    CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.Open(Object& DocumentPath, Int32 Options) +95 
    CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened() +356 

[CrystalReportsException: Load report failed.] 
    CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened() +418 
    CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename, OpenReportMethod openMethod, Int16 parentJob) +895 
    CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename) +84 
    _Default.CreateReport() in d:\inetpub\vhosts\mydomain.in\subdomains\mysubdomain\httpdocs\Default.aspx.cs:43 
    _Default.Page_Load(Object sender, EventArgs e) in d:\inetpub\vhosts\mydomain.in\subdomains\mysubdomain\httpdocs\Default.aspx.cs:21 
    System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14 
    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35 
    System.Web.UI.Control.OnLoad(EventArgs e) +99 
    System.Web.UI.Control.LoadRecursive() +50 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627 

我無法獲取錯誤所在。該報告是平躺在根文件夾本身。那麼這是什麼問題。還有另一個文件夾aspnet_client。我們需要做什麼?

請等待回覆

+0

您是否因爲此特定報告或所有報告而出現此錯誤? – Deb 2012-04-23 16:02:47

+0

所有報告..我想有一些問題與許可..但我不能弄明白。它在我的IIS上工作正常 – Moiz 2012-04-23 16:08:39

+2

確保您的報表服務器(網絡服務)在C:\ Windows \ Temp \文件夾上具有讀寫權限。 – Deb 2012-04-23 16:23:01

回答

3

這是要檢查的東西。

您收到此錯誤的原因是文件名,路徑無效或CR無法訪問該文件。

如果路徑和文件名都ok,那麼你需要確保網絡服務讀/寫允許您臨時文件夾(一般C:\windows\Temp)。

如果它仍然不能解決問題,那麼也許您的Temp文件夾已滿並且CR不會清除垃圾。

如果是這種情況,那麼你需要確保你得到適當處置報告對象並調用GC把它清理乾淨。

有些時候,CR行爲不可預測。我已經很難學會,即使您打電話處置您的ReportDocument對象之後GC.Collect()仍然.rpt文件溫度文件夾不清理。並且沒有限制。 Temp文件夾中的.rpt文件之後,CR停止執行進一步的報告請求。

奇怪的是,當你聲明你的ReportDocument對象在函數或事件處理函數中時,會發生這種情況。但是,如果您在頁面範圍內聲明ReportDocument全局範圍,那麼當您調用Dispose方法時,Crystal會報告愉快地清除臨時.rpt文件!

我希望這會給你一些解決問題的見解。

+0

感謝您的回覆..但我在我託管我的網站的服務器上有這個問題。那麼我怎樣才能清除服務器的Temp文件夾呢? – Moiz 2012-04-24 12:54:39

13

這同樣的問題令我頭痛不已。現在我找到了答案:)

轉到c:\windows\temp文件夾,並在其properties->security 添加新用戶「IIS_IUSRS」,並給它全/讀,寫能力。

它解決了我的問題。

希望它爲你太:)

+1

非常感謝。瘋狂試圖找出這個錯誤! – Arm0geddon 2013-02-11 18:49:44

+0

如何通過控制面板來做到這一點? – 2013-05-22 19:35:06

+0

我認爲這個解決方案對我們的水晶報告問題已經有了很大的幫助。保存了很多頭抓:)謝謝! – 2016-05-17 09:35:50

0

東西還需要檢查的是,已經在服務器上添加了所有適當的IIS角色服務。我們在新安裝的生產服務器上找到了同樣的問題,但在我們的本地開發環境中找不到。事實證明,IIS是作爲服務器角色添加的,但未將ASP.NET &服務器端包含作爲角色服務&添加,因此Crystal Report Viewer未呈現任何報告。

如果您正在運行Windows Server 2008,則可以通過服務器管理器工具管理這些角色&角色服務。