0

我正在使用 VS.Net 2010 和嵌入式 CR 开发一个 Web 应用程序,它可以在 MS 2008 和 IIS 7 上运行。其中一个功能是更新数据库记录(~20-50)并将水晶报告打印到网络打印机上for循环中的每条记录。(由于业务需要,报告必须一一打印)该功能在我的机器上运行良好。如果将报告打印到 PDF 打印机,它也可以在服务器上运行。

但是,如果打印到物理网络打印机,则在多次循环后在事件查看器中提示标题错误;页面中没有返回异常,它只是停在某个点并加载页面直到超时。

我在程序中添加了日志记录,发现循环可以在任何地方停止,即创建一个新的水晶报表,设置报表数据源分配打印机名称,更新记录......

下面是打印报表的代码片段,非常简单:

rptDoc.PrintOptions.PrinterName = strPrinterName;

rptDoc.PrintToPrinter(intPrintCopy, false, 0, 0);

如果上面的代码被注释掉了,错误就不会再发生了,无论有多少条记录,for循环每次都能完成。

故障模块可能是 ntdll.dll(大多数)、crpe32.dll、kernel32.dll、MSVCR80.dll 等;以下是捕获的一些错误消息:

  • 错误应用程序 w3wp.exe,版本 7.0.6001.18000,时间戳 0x47919ed8,错误模块 ntdll.dll,版本 6.0.6001.18538,时间戳 0x4cb73957,异常代码 0xc0000005,错误偏移量 0x0000000000046ef0,进程 id 0x%9,应用程序启动时间 x0 .

  • 错误应用程序 w3wp.exe,版本 7.0.6001.18000,时间戳 0x47919ed8,错误模块 kernel32.dll,版本 6.0.6001.18631,时间戳 0x4da46d09,异常代码 0xe0434352,错误偏移量 0x0000000000025efd,进程 id 0901 0x9d9c04b.cc 9 dx 启动时间

  • 错误应用程序 w3wp.exe,版本 7.0.6001.18000,时间戳 0x47919ed8,错误模块 crpe32.dll,版本 13.0.2.469,时间戳 0x4eb91936,异常代码 0xc0000005,错误偏移量 0x00000000002948ea,进程 ID 0x%9,应用程序启动时间 0%x .

我不熟悉服务器和 IIS 的东西,但这似乎不是编程问题,因为它在计算机上运行良好。任何人都可以给我一些想法?

非常感谢!

4

1 回答 1

0

经过测试和测试,我发现这实际上是一个编码问题。一个通用函数根据记录信息启动和返回一个报表文档对象(带有数据源集)。它在循环中使用,因此可能有太多的报表文档对象被启动并导致 IIS 进程崩溃。这很可能是另一个水晶报告错误“最大报告处理作业限制”。但是,程序只是没有抛出这个错误。事件查看器中的错误也让我分心。

现在,为了解决这个问题,我在循环之前启动了一个报表文档,在循环中更新它的数据源并在循环之后处理它。

于 2012-02-02T03:01:32.253 回答