4

我创建了一个 .Net 应用程序以在应用程序服务器上运行,该应用程序服务器获取报告请求并打印出请求的报告。

C# 应用程序使用 Crystal Reports 加载报表并随后将其打印出来。

该应用程序在服务器上运行,该服务器通过特定用户帐户下的远程桌面连接(旧应用程序需要)连接到该服务器。当我从远程会话断开连接时,应用程序开始引发异常,例如:

消息:CrystalDecisions.Shared.CrystalReportsException:加载报告失败

当远程会话处于活动状态时,永远不会引发此类错误。运行该应用程序的服务器正在运行 Windows Server 2003,我创建连接的机器是 Windows XP。

我很欣赏这很奇怪,但是我看不到我创建的应用程序部署有任何问题。

有谁知道可能导致此问题的原因是什么?

编辑:我硬着头皮将应用程序创建为 Windows 服务,显然这不会花很长时间,我只是不相信它会解决问题。反正不行!!!

我还尝试删除异步调用打印函数的多线程代码。我这样做是为了简化应用程序并缩小它可能失败的原因。无论如何,这也没有改善情况!

编辑:我得到的两个错误是:

System.Runtime.InteropServices.COMException (0x80000201):指定的打印机无效。在 CrystalDecisions.ReportAppServer.Controllers.PrintOutputControllerClass.ModifyPrinterName(String newVal) 在 CrystalDecisions.CrystalReports.Engine.PrintOptions.set_PrinterName(String value) 在 Dsa.PrintServer.Service.Service.PrintCrystalReport(报告报告)

打印机没有失效,60秒后时间滴答即确认,报告打印成功。

无法提交请求以进行后台处理。在 CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.GetLastPageNumber(RequestContext pRequestContext) 在 CrystalDecisions.ReportSource.EromReportSourceBase.GetLastPageNumber(ReportPageRequestContext reqContext) --- 内部异常堆栈跟踪结束 --- 在 CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e)在 CrystalDecisions.ReportSource.EromReportSourceBase.GetLastPageNumber(ReportPageRequestContext reqContext) 在 CrystalDecisions.CrystalReports.Engine.FormatEngine.PrintToPrinter(Int32 nCopies, Boolean collat​​ed, Int32 startPageN, Int32 endPageN) 在 CrystalDecisions.CrystalReports.Engine.ReportDocument.PrintToPrinter(Int32 nCopies, Boolean整理,Int32 startPageN,

编辑:

我运行了 filemon 来检查是否有任何访问问题。发生错误时文件 mon 报告

请求:打开 | 路径:C:\windows\assembly\gac_msil\system\2.0.0.0__b77a5c561934e089\ws2_32.dll | 结果:未找到 | 其他:属性错误

4

7 回答 7

2

我们的特殊问题已经解决。基本上,当创建报告时,它们会保存有关打印机的信息。基本上,已为报告设置并保存了特定的打印机。

这台打印机不再存在,这就是报告开始失败的原因。基本上,我们必须打开报表设计器并删除报表中与打印机的任何关联。

于 2009-08-21T10:28:42.723 回答
1

在过去的几年中,我们多次遇到这些错误。很多时候,我希望得到一些更具体的错误信息。

首先,我将验证没有安装多个 Crystal Reports 版本。根据我们的经验,我们发现 Crystal Reports 9.0 似乎与 10 不兼容。卸载版本 9 似乎对我们的一些客户有所帮助。如果两者都安装了,我强烈建议将两者都卸载,然后重新安装 Crystal Reports 10。

我们最早的 Crystal Reports 错误之一是可怕的“无法提交请求以进行后台处理”。报告会在一段时间内正常工作,然后突然停止。查看代码后,我发现我们没有处理 ReportDocument 的地方。正确处理此文档解决了该问题。

最近,我们遇到了“无法提交请求以进行后台处理”的争吵。和“无效的打印机”错误。一位客户的服务器有几台由 IP 地址定义的网络打印机。打印一段时间可以正常工作,然后突然,bam,客户收到“无效打印机”错误并致电我们的支持。

一位开发人员通过执行以下所有操作修复了“无效打印机”问题:

  1. 在 Visual Studio 2005 中编辑并保存 .rpt 文件。我们一直保持报表格式与 Crystal Reports 9 兼容,因为我们希望我们的更改能够分发给仍在使用旧版本的客户。
  2. 使用“无打印机”选项保存 Crystal Reports 文件。从 Visual Studio 2005 菜单中,选择 Crystal Reports/Design/Printer Setup,然后选择“No Printer”复选框。
  3. 我们更改了一个显示“第 N 页,共 M”的公式,如下所示:

"Page " + Left (CStr (PageNumber), Length (CStr (PageNumber)) - 3) +
" of " + Left (CStr (TotalPageCount), Length (CStr (TotalPageCount)) - 3)

对此:

"Page " + CStr(PageNumber,0) + " of " + CStr(TotalPageCount,0)

不幸的是,我不知道上述哪些(任何或全部)操作可以修复错误。我说“可能”,因为据我所知,由于一些 IT 网络更改,错误神奇地消失了。

最后,你读过 这份白皮书吗? 虽然它不一定能解决我们的问题,但它非常有趣。

于 2009-04-01T19:28:23.380 回答
0

如果您为您的应用程序创建了一个窗口服务包装器,这意味着无论用户是否登录,它都会继续运行。它也可以设置为自动启动。我认为因为您使用的是实际应用程序,而不是 Windows 服务,所以一旦您注销服务器上的会话,它实际上并没有运行。

这是代码项目的示例:

http://www.codeproject.com/KB/system/WindowsService.aspx

于 2009-03-02T13:16:21.493 回答
0

您确定要“断开”远程会话而不是“注销”。我一直断开与 nt server 2003 的会话,一切都继续运行良好。另一方面,注销会杀死应用程序在该会话中运行。

你的操作系统服务器在运行什么?

于 2009-03-06T17:31:27.650 回答
0

为了解决您所描述的问题,您需要专注于您的问题是什么。

我收到了消息:CrystalDecisions.Shared.CrystalReportsException:加载报告多次失败,这是由于您无法访问该报告。它不存在,或者在您的情况下您没有连接到机器。该错误不是由于任何与打印相关的。

于 2009-03-31T22:55:49.033 回答
0

我遇到了一个与此类似的模糊问题,除了它是 Excel 的(令人震惊的)自动化问题。当我连接远程桌面会话时,我发现该应用程序运行良好,但一旦断开连接,就会出现与默认打印机相关的自动化错误。

我相信这个问题与您连接远程桌面时默认打印机的设置方式有关。假设您有一个用于启动远程桌面会话的 .rdp 文件,如果您编辑它,然后选择“本地资源”选项卡,您可以查看您是否在远程会话中共享本地打印机。

如果启用,这意味着当您连接时,您的本地默认打印机将成为远程机器上的默认打印机。当您断开连接时,您的应用程序的默认打印机仍可能会引用本地计算机上现在不可用的默认打印机。

您应该能够解决此问题,方法是确保您不共享本地打印机,方法是取消选择“本地资源”选项卡中的打印机复选框。

一个更简单的解决方案是在服务器上禁用“打印机重定向”。有关详细信息,请参阅https://serverfault.com/questions/5646/how-do-i-disable-remote-printers-using-group-policy

于 2009-07-14T03:04:52.367 回答
0

如果您正在详细查看如何

在布尔字段的水晶报告中添加复选框,如果布尔字段为假

取消选中其他选中复选框看看这篇文章

http://checkboxcrystalreport.blogspot.com/2009/07/printing-checkbox-in-crystal-report-for.html

于 2009-07-18T12:11:36.623 回答