4

我已经上传了我的 WebApplication 。我的应用程序在带有 Crystal Reports 2008 sp3 的 VS2008 中。我已经上传到并行丛服务器上。我已经在 Bin 文件夹中添加了所有水晶报表所需的 Dll。我的报告路径也是正确的。

我收到的错误是

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。这是我们需要做的吗?

请耐心等待回复

4

3 回答 3

15

同样的问题让我头疼了好一阵子。现在我找到了答案:)

转到c:\windows\temp 文件夹并在其上properties->security 添加新用户“ IIS_IUSRS”并赋予其完整/读写能力。

它为我解决了这个问题。

希望它也适合你:)

于 2012-09-25T06:29:14.873 回答
4

这是要检查的东西。

您收到此错误是因为文件名、路径无效或 CR 无法访问该文件。

如果路径和文件名正常,那么您需要确保网络服务对您的Temp文件夹具有读/写权限(通常)。C:\windows\Temp

如果它仍然不能解决问题,那么您的 Temp 文件夹可能已满并且 CR 没有清理垃圾。

如果是这种情况,那么您需要确保您正在适当地处理您的 Report 对象并调用GC来清理它。

有时 CR 的行为不可预测。我以一种艰难的方式了解到这一点,即使您在ReportDocument对象上调用 dispose,然后GC.Collect()仍然没有清理Temp.rpt文件夹中的文件。没有限制。.rpt 文件在 Temp 文件夹中,之后 CR 停止执行进一步的报告请求。

奇怪的是,当您ReportDocument在函数或事件处理程序中声明对象时,就会发生这种情况。但是,如果您在页面范围的全局范围内声明您的 ReportDocument,那么当您调用 Dispose 方法时,水晶报告会愉快地清理临时 .rpt 文件!

我希望这会给您一些解决问题的见解。

于 2012-04-23T16:55:20.117 回答
0

还要检查的是所有适当的 IIS 角色服务都已添加到服务器上。我们在新安装的生产服务器上发现了同样的问题,但在我们的本地开发环境中没有。事实证明,IIS 是作为服务器角色添加的,但 ASP.NET 和服务器端包含没有作为角色服务添加,因此 Crystal Report Viewer 没有呈现任何报表。

如果您运行的是 Windows Server 2008,则可以通过服务器管理器工具管理这些角色和角色服务。

于 2013-12-17T07:17:39.653 回答