如果在循环中打印水晶报告,则在事件查看器中找到错误“Faulting application w3wp.exe ...”

时间:2012-01-12 03:57:24

标签: iis printing crystal-reports fault w3wp

我正在使用VS.Net 2010开发一个网络应用程序&嵌入式CR将在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,申请开始时间为0x%10。

  • 错误应用程序w3wp.exe,版本7.0.6001.18000,时间戳0x47919ed8,错误模块kernel32.dll,版本6.0.6001.18631,时间戳0x4da46d09,异常代码0xe0434352,错误偏移0x0000000000025efd,进程ID 0x9c0,应用程序启动时间0x01ccd042bf90d940。

  • 错误应用程序w3wp.exe,版本7.0.6001.18000,时间戳0x47919ed8,错误模块crpe32.dll,版本13.0.2.469,时间戳0x4eb91936,异常代码0xc0000005,错误偏移0x00000000002948ea,进程ID 0x%9,申请开始时间为0x%10。

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

非常感谢!

1 个答案:

答案 0 :(得分:0)

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

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