我们在带有.NET Framework 3.5 SP1的Windows Server 2008上运行Crystal Reports。
我看到一般错误的原因很多“无法提交请求进行后台处理。”在其他论坛上,由于特定报告的特定格式问题,它们往往会持续且可重复地影响单个报告。
我们间歇地看到了下面的堆栈跟踪错误。
这些报告以前都没有问题。服务器或代码似乎没有明显变化,这会导致此错误。这背后的所有代码都是VB.NET
我们很难在测试环境中复制它,升级到最新版本的Crystal根本没有帮助。 您可以提出任何帮助或建议以解决此问题。
"The request could not be submitted for background processing."
at CrystalDecisions.ReportAppServer.Controllers.DatabaseControllerClass.ReplaceConnection(Object oldConnection, Object newConnection, Object parameterFields, Object crDBOptionUseDefault)
at CrystalDecisions.CrystalReports.Engine.Table.SetDataSource(Object val, Type type)
at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSourceInternal(Object val, Type type)
--- End of inner exception stack trace ---
at CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e)
at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSourceInternal(Object val, Type type)
at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSource(DataSet dataSet)
at "USER CODE"
答案 0 :(得分:3)
经过很多天,我终于发现了问题的根源,以防您在报告中包含 jpg图片。
对于VS2008或更高版本的CR,无法处理CMYK模式下的jpg文件。 CR只能处理RGB模式下的jpg文件。
有趣的是CR的较低版本(VS2003附带的版本)可以处理任何类型的jpg文件。谢谢,Crystal。
答案 1 :(得分:1)
隔离报告生成代码。
我们的最终解决方案是采用生成报告的代码并将其移至自己的隔离服务中。然后,我们的原始服务使用相关参数和Crystal RPT文件调用我们的新Crystal服务。这显然是一个代价高昂的解决方案,因为它涉及修改所有报告生成代码以调用Crystal服务。 Crystal服务不会出现错误。除此之外,代码没有改变,因此我们只能假设错误的原因是Crystal报表引擎与应用程序中的环境之间的某些交互。
答案 2 :(得分:1)
对我来说,问题出在Temporary Crystal Report中,该报告是在Windows的TEMP文件夹中生成的。 Crystal报表引擎在循环中处理它时可以生成的临时Crystal Reports的数量有一个限制。由于C驱动器内存不足或达到报告限制,Temp文件夹中的空间用完,之后一次运行晶体报告无法进一步导出。它会给出所提到的错误。
对我来说,这个问题在处理的每500份报告中反复出现(我正在生成报告说,一年后使用我的应用程序将它们逐个导出到系统文件夹中)
解决方案很简单。 导出后暂时关闭并处置临时.rpt Crystal Report文件。
for i as integer=0 to reportcount -1
Dim rpt as New MyCrystalReport
Dim filename as String = "MyReport" & i & ".Pdf"
//Query the DB obtain the dataset then set the datasource to the report
...
//Export the report
rpt.ExportToDiskCrystalDecisions.Shared.ExportFormatType.PortableDocFormat,fileName)
rpt.Close()
rpt.Dispose()
next
答案 3 :(得分:0)
报告对象是否有可能泄漏到服务器的内存中?我遇到了类似的情况,其中报表对象存储在Session对象中,因此当用户在页面之间导航时,报表不需要重新加载。但是,当用户完成报告时,对象仍保留在会话中,并且在会话被服务器销毁时未正确清理。我不得不在global.asax的Session_End事件中添加一些代码来查找报表对象并在其上调用dispose方法。
这种情况间歇性地出现,然后影响所有报告10分钟,这让我觉得它可能与会话有关。在我的情况下,服务器达到了可以在服务器(在内存中)创建的报告数量的限制,因为它们没有被释放。症状与你的相似。
希望这有帮助!
答案 4 :(得分:0)
试试这个:如果你在水晶报告(页眉,页脚或任何部分)留下任何空格,请禁止它。就这样。我有这个问题,我这样修复。
答案 5 :(得分:0)
我也遇到过这样的问题,我发现有照片的专栏正在创建这个问题。出路是将照片(SQL Server中的数据类型图像)从.NET数据集转换为字节,然后将其另存为位图。之后,可以将同一BMP文件转换为字节,并替换为已标识行的适当列。这样一来,空间就大大缩小了,然后在导出报告文档和数据表之后就正确处理了。