Iis “错误”;出现故障的应用程序w3wp.exe…“;如果在循环中打印crystal报告,则在事件查看器中找到

Iis “错误”;出现故障的应用程序w3wp.exe…“;如果在循环中打印crystal报告,则在事件查看器中找到,iis,printing,crystal-reports,fault,w3wp,Iis,Printing,Crystal Reports,Fault,W3wp,我正在使用VS.NET2010和嵌入式CR开发一个web应用程序,它将在MS2008和IIS7上运行。 其中一个功能是更新数据库记录(~20-50),并为for循环中的每个记录向网络打印机打印水晶报告。(因业务需要,报表需逐条打印) 这个功能在我的机器上运行得很好。如果报告打印到PDF打印机,它也可以在服务器上工作 但是,如果打印到物理网络打印机,则在多次循环后,事件查看器中会出现标题错误提示;页面中没有返回异常,它只是在某个点停止,页面加载直到超时 我在程序中添加了日志记录,发现循环可以在任何

我正在使用VS.NET2010和嵌入式CR开发一个web应用程序,它将在MS2008和IIS7上运行。 其中一个功能是更新数据库记录(~20-50),并为for循环中的每个记录向网络打印机打印水晶报告。(因业务需要,报表需逐条打印) 这个功能在我的机器上运行得很好。如果报告打印到PDF打印机,它也可以在服务器上工作

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

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

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

rptDoc.PrintOptions.PrinterName = strPrinterName;

rptDoc.PrintToPrinter(intPrintCopy, false, 0, 0);
如果对上述代码进行了注释,则不再发生错误,并且无论有多少条记录,for循环每次都可以完成

故障模块可能是ntdll.dll(most)、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,异常代码0xE04352,故障偏移量0x0000000000025efd,进程id 0x9c0,应用程序启动时间0x01ccd042bf90d940

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

我不熟悉服务器和IIS的东西,但这似乎不是一个编程问题,因为它在计算机上运行良好。 谁能给我一些建议


非常感谢

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

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