我一直在努力工作两周,大部分时间都花在等待我的支持问题的回应上 . 我有解决方案,我将在这里发布,希望它可以帮助下一个遇到这个问题的人 . 我将投入大量不必要的细节来增加下一个发现这个的可能性 .
我正在使用MVC5站点,并使用ActiveReports 8 HTML5查看器显示IList绑定的基于代码的部分报告 . 我已使用availableExports参数启用了PDF,Word和Excel导出到GrapeCity.ActiveReports.Viewer javascript函数 . 查看器在页面上正确呈现,并对ActiveReports.ReportSerice.asmx进行预期调用,该调用返回呈现报告所需的信息,包括从中流式传输数据的URL . 报告显示在查看器中就好了 . 到现在为止还挺好 .
在我的开发机器上,我可以导出为PDF,Word和Excel . 但是,当部署到测试服务器时,Excel导出停止工作,浏览器只显示一个保存文件对话框,试图保存名为ActiveReports.ar8?blahblahblah的文件 . 挖掘Fiddler,我确定这与上面报告服务调用返回的URL几乎完全相同,除了一些参数,如“Command = Export”和“ExportFormat = Xls” .
保存此“文件”会生成一个名为ActiveReports.xls的0字节文件 . 我可以通过删除关键dll(例如GrapeCity.ActiveReports.Export.Pdf)然后请求PDF导出来模拟其他导出类型的此行为 . 在我看来,ActiveReports(至少从版本8.1.414.0开始)吞下某些服务器端错误,例如缺少dll,并向客户端返回404错误代码 . 我认为有关缺少的详细信息的500错误将优于通用404 .
这让我相信测试服务器上缺少某些东西 . 由于我在所有ActiveReports dll上都设置了“copy local”,并且我可以看到它们都已成功部署到测试服务器,因此缺少的部分必须是我本地计算机的GAC中存在的内容,而不是服务器上的内容 .
使用Fiddler,我确定对ActiveReports.ar8?blahblahblah URL的响应的返回码为404.结果404响应中的content-disposition头已设置为“attachment; filename = ActiveReports.xls”,但是Content-Type是“text / html”而不是预期的“application / vnd.ms-excel” . 这告诉我,出口在放弃之前至少在处理过程中处于中途 .
服务器上缺少什么阻止Excel导出完成?