首页 文章

调试可能的Crystal Reports的提示在ASP.NET中挂起

提问于
浏览
1

试图保持这种简短:我们的运输人员使用支持Windows Mobile的条形码扫描仪扫描客户订单上的物品序列号 . 该数据通过asmx Web服务提交,报告将自动打印到联网打印机,显示客户信息和发货项目的详细信息 . 所有这些都发生在Intranet环境中 .

直到最近,我还使用Visual Studio内置的Microsoft报表引擎(.rdlc文件)来生成报告,并在没有用户干预的情况下打印出来的代码 . 几年来它一直很好用 .

最近,我遇到了MS Reports中的一些报告格式限制,并在Crystal Reports(10.5.3700)中实现了报告 . 代码工作正常,但在 生产环境 中运行了几个小时到一天或更长时间后,asp.net工作进程挂起(不确定这是否是合适的术语) . 报告生成/打印过程永远运行而不会抛出异常 . 回收AppPool让一切都恢复了一段时间 .

报告使用“推送”模式,其中报告被赋予类型化数据集而不是访问数据库本身 . 为了使CR ReportDocument.PrintToPrinter()方法脱离等式,我考虑将生成的报告导出为PDF或类似文件,然后单独打印生成的文件 . 但我还没有找到一个好方法 .

研究这个问题,我已经阅读了各种关于Crystal的错误的抱怨,但是我希望我的代码中有一个与打印报告后清理有关的错误 .

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.ReportAppServer
Imports CrystalDecisions.Shared

Public Class CrystalReport

Private _report As ReportDocument

Public Sub New(ByVal Path As String)
    _report = New ReportDocument()
    _report.Load(Path)
End Sub

Public Sub SetDatasource(ByVal DataSet As DataSet)
    _report.SetDataSource(DataSet)
End Sub

Public Sub AddParameter(ByVal Name As String, ByVal Value As Object)

    Dim crParameterFieldDefinitions As ParameterFieldDefinitions = _report.DataDefinition.ParameterFields
    Dim crParameter1 As ParameterFieldDefinition = crParameterFieldDefinitions.Item(Name)
    Dim parameterValue As CrystalDecisions.Shared.ParameterDiscreteValue = New CrystalDecisions.Shared.ParameterDiscreteValue()

    parameterValue.Value = Value
    crParameter1.CurrentValues.Add(parameterValue)
    crParameter1.ApplyCurrentValues(crParameter1.CurrentValues)

End Sub

Public Sub Print(ByVal PrinterPath As String)
    _report.PrintOptions.PrinterName = PrinterPath
    _report.PrintToPrinter(1, True, 0, 0)
    Close()
End Sub

Private Sub Close()
    _report.Close()
    _report.Dispose()
    _report = Nothing
End Sub

End Class

有进一步调试的想法吗?我从来没有采用真正的Windows调试(WinDbg,Process Explorer等),因此任何关于首先尝试调试工具的建议都会很棒 .

谢谢 .

1 回答

  • 0

    这听起来好像报告实际上没有被发布,虽然通过查看你的代码,你会认为你正在做的就是这样 .

    您可以在ASP.NET页面的 Page_Unload 事件上尝试 Close()Dispose() . Microsoft ASP.NET论坛上的This forum post讨论了达到最大量的报告处理作业的问题,但我想这个问题可能是相关的 .

相关问题