2012-04-23 133 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,则可以通过服务器管理器工具管理这些角色&角色服务。