断开会话时,.Net Crystal Report打印应用程序在终端服务连接错误上运行

时间:2009-03-02 13:08:54

标签: c# crystal-reports remote-desktop

我创建了一个.Net应用程序,可以在App Server上运行,获取报告请求并打印出所请求的报告。

C#应用程序使用Crystal Reports加载报告,然后将其打印出来。

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

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

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

我很欣赏这很奇怪,但我发现我创建的应用程序部署没有任何问题。

有谁知道导致这个问题的原因是什么?

编辑:我咬了一口子并将应用程序创建为Windows服务,显然这不会花很长时间我只是不相信它会解决问题。无论如何它没有!!!

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

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

  

System.Runtime.InteropServices.COMException   (0x80000201):打印机无效   指定。在   CrystalDecisions.ReportAppServer.Controllers.PrintOutputControllerClass.ModifyPrinterName(字符串   newVal)at   CrystalDecisions.CrystalReports.Engine.PrintOptions.set_PrinterName(字符串   价值)   Dsa.PrintServer.Service.Service.PrintCrystalReport(报告   报告)

打印机无效,60秒后确认时间,并且报告打印成功。

  

无法提交请求   后台处理。在   CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.GetLastPageNumber(的RequestContext   pRequestContext)at   CrystalDecisions.ReportSource.EromReportSourceBase.GetLastPageNumber(ReportPageRequestContext   reqContext)---内心的结束   异常堆栈跟踪--- at   CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(例外   吃   CrystalDecisions.ReportSource.EromReportSourceBase.GetLastPageNumber(ReportPageRequestContext   reqContext)at   CrystalDecisions.CrystalReports.Engine.FormatEngine.PrintToPrinter(的Int32   nCopies,布尔整理,Int32   startPageN,Int32 endPageN)at   CrystalDecisions.CrystalReports.Engine.ReportDocument.PrintToPrinter(的Int32   nCopies,布尔整理,Int32   startPageN,Int32 endPageN)at   Dsa.PrintServer.Service.Service.PrintCrystalReport(报告   报告)

编辑:

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

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

8 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

在过去几年中,我们多次遇到过这些错误。我多次希望提供更具体的错误信息。

首先,我将验证是否安装了多个Crystal Reports版本。在我们的经历中,我们发现Crystal Reports 9.0似乎不能很好地发挥作用。卸载版本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 /设计/打印机设置”,然后选中“无打印机”复选框。
  3. 我们更改了一个显示“Page N of M”的公式,如下所示:
  4. "Page " + Left (CStr (PageNumber), Length (CStr (PageNumber)) - 3) +
    " of " + Left (CStr (TotalPageCount), Length (CStr (TotalPageCount)) - 3)
    

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

    到此:

    不幸的是,我不知道上述行为中的哪一个(任何或所有)都可以修复错误。我说“可能”,因为据我所知,由于IT网络的一些变化,错误神奇地消失了。

    最后,你读过this white paper?虽然它不一定能解决我们的问题,但它非常有趣。

答案 2 :(得分:0)

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

以下是代码项目的示例:

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

答案 3 :(得分:0)

你确定你正在“断开”你的远程会话而不是“注销”。我一直将会话断开连接到nt服务器2003并继续运行一切正常。另一方面注销杀死该会话中运行的应用程序。

你的o / s服务器在运行什么?

答案 4 :(得分:0)

为了解决您所描述的问题,您需要关注问题所在。

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

答案 5 :(得分:0)

经过长时间的谷歌搜索,我发现这个链接但没有尝试,因为没有任何其他免费服务器。

http://www.microsoft.com/technet/security/bulletin/ms04-017.mspx

答案 6 :(得分:0)

我有一个类似于此的模糊问题,除了它是Excel的(震惊 - 恐怖)自动化问题。当我连接远程桌面会话时,我发现应用程序工作正常,但一旦断开连接,就会出现与默认打印机相关的自动化错误。

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

如果启用,则表示连接时,本地默认打印机将成为远程计算机上的默认打印机。断开连接时,应用程序的默认打印机仍可能从本地计算机引用现在不可用的默认打印机。

您应该能够通过取消选择“本地资源”标签中的“打印机”复选框来确保您不共享本地打印机来解决此问题。

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

答案 7 :(得分:0)

如果您正在详细了解如何

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

取消选中其他选中此文章的复选框

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