我正在创建一个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))。'
注意:Crystal Report没问题。当我在控制台应用程序中使用相同的代码时,它将起作用。
答案 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。