7

我们在带有 .NET framework 3.5 SP1 的 Windows Server 2008 上运行 Crystal Reports。

我已经看到了导致一般错误“无法提交请求以进行后台处理”的许多原因。然而,在其他论坛上,由于特定报告的特定格式问题,它们往往是持久且可重复的,仅影响单个报告。
我们在以下堆栈跟踪中间歇性地看到此错误。

  • 它影响我们拥有的多个不同的报告。
  • 它比其他报告更频繁地影响一个特定报告。
  • 一旦报告受到影响,相同的错误通常会几乎同时出现在多个报告中,例如。接下来的 10 分钟。
  • 使用相同参数运行的相同报表可能会在再次运行时(不久之后)起作用,或者应用程序可能需要重新启动才能成功重新运行报表。

这些报告以前都可以正常工作。服务器或代码中似乎没有明显的变化会引发此错误。这背后的所有代码都是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"
4

6 回答 6

5

经过很多天,我终于发现了问题的根源,以防您在报告中包含jpg图像

问题是 VS2008 或更高版本的 CR无法处理 CMYK 模式下的 jpg 文件。CR 只能处理 RGB 模式下的 jpg 文件。

有趣的是,较低版本的 CR(VS2003 附带的那个)可以处理任何类型的 jpg 文件。谢谢,水晶。

于 2013-04-03T13:35:50.883 回答
2

对我来说,问题在于在 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


于 2017-07-13T12:32:07.653 回答
1

隔离报告生成代码。

我们的最终解决方案是采用生成报告的代码并将其移动到自己的隔离服务中。然后我们的原始服务使用相关参数和 Crystal RPT 文件调用我们的新 Crystal 服务。这显然是一个代价高昂的解决方案,因为它涉及修改所有报表生成代码以改为调用 Crystal 服务。Crystal 服务不会出现该错误。除此之外代码没有改变,所以我们只能推测错误的原因是水晶报表引擎和我们应用程序中的环境的一些交互。

于 2011-11-30T15:26:56.610 回答
0

报告对象是否有可能在服务器的内存中泄漏?我遇到了类似的情况,报告对象被存储到 Session 对象中,因此当用户在页面之间导航时不需要重新加载报告。但是,当用户完成报告后,该对象仍保留在 Session 中,并且在 Session 被服务器销毁时没有正确清理。我不得不在 global.asax 的 Session_End 事件中添加一些代码来找到报告对象并在其上调用 dispose 方法。

这会间歇性出现,但会在 10 分钟内影响所有报告,这让我认为这可能与会话有关。在我的情况下,服务器达到了可以在服务器上(在内存中)创建的报告数量的限制,因为它们没有被释放。症状和你一样。

希望这可以帮助!

于 2010-02-02T01:14:24.553 回答
0

试试这个:如果你在水晶报表(页眉、页脚或任何部分)留下任何空白,请抑制它。就这样。我有这个问题,我用这种方式解决了。

于 2011-03-07T11:37:32.530 回答
0

我也遇到过这样的问题,我发现有照片的专栏正在制造这个问题。出路是将照片(SQL Server中的数据类型图像)从.NET数据集转换为字节,然后将其保存为位图。之后,可以将同一 BMP 文件转换为字节并替换为已识别行的适当列。这样空间就大大减少了,然后在导出报表文件和数据表后得到了正确的处理

于 2020-03-07T12:57:47.797 回答