为什么在CrystalReport导出中出现System.InvalidCastException?

时间:2018-09-05 12:03:00

标签: c# wcf crystal-reports

我正在创建一个WCF服务,该服务将使用Crystal Report创建.pdf并将文件保存在服务器中的特定路径中。为什么在此行中出现 System.InvalidCastException 异常?另外,我在每个Export函数中都遇到了此异常。

MemoryStream memoryStream = (MemoryStream)cryRpt.ExportToStream(ExportFormatType.PortableDocFormat);

异常详细信息:

  

System.InvalidCastException:'无法转换类型为COM的对象   将'CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass'更改为   接口类型   “ CrystalDecisions.ReportAppServer.Controllers.ISCRReportSource”。这个   操作失败,因为对COM组件的QueryInterface调用   用于具有IID'{31E7715A-8AD0-4D1C-958E-C1BE0A6F2D0C}'的接口   由于以下错误而失败:不支持此类接口   (来自HRESULT的异常:0x80004002(E_NOINTERFACE))。'

Exception Screenshot

注意:Crystal Report没问题。当我在控制台应用程序中使用相同的代码时,它将起作用。

2 个答案:

答案 0 :(得分:1)

因为它不返回MemoryStream。

看看this link以获得更多信息。他们说,从某些版本的Crystal开始,该方法将返回FileStreamDeleteOnClose的实例,这是开发人员的决定。

看看this post,看看如何用另一种方法来处理它。

编辑:

this post中,解决方法是降级Crystal Reports。不好...

SAP forums中,有关于它的讨论。据说为了避免这种情况,Microsoft Windows Update KB2999226是SP21的先决条件(在某些细节中)。检查您的Crystal Reports版本,并检查它是否适用于您。

答案 1 :(得分:0)

好。通过将Crystal Report更新到版本18.0.23,可以解决我的问题。可能是较旧的版本不适用于WCF。