关于Crystal Report的随机问题:加载报告失败问题

问题描述

在我的Asp.net网站上,在具有相同功能(相同代码)的生产服务器上,有时会出现如下所述的错误

但是我并非总是会收到此错误,如果它的文件夹权限问题,那么这个问题应该总是出现。但是它是随机产生的。 一段时间后,如果我们再试一次,它将没有任何问题。不确定造成这种随机性的原因是什么。

在测试和UAT环境中完全相同的代码

CrystalDecisions.Shared.CrystalReportsException:加载报告失败。 ---> System.Runtime.InteropServices.COMException:访问被拒绝。在 CrystalDecisions.ReportAppServer.ClientDoc.ReportClientDocumentClass.Open(Object& DocumentPath,Int32选项),网址为 CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.Open(Object& DocumentPath,Int32选项),网址为 CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened()

private byte[] GetPdf(DataTable dt)
    {
        using (ReportDocument cryRpt = new ReportDocument())
        {
            byte[] byteArray = null;
            try
            {
        
                if (dt.Rows[0]["Id"].ToString() == "1" )
                    cryRpt.Load(Server.MapPath("~/Main/RPT/Sample.rpt"));
                else if (dt.Rows[0]["Id"].ToString() == "2")
                    cryRpt.Load(Server.MapPath("~/Main/RPT/Oform.rpt"));
                
                cryRpt.Database.Tables[0].SetDataSource(dt);
                
                ExportOptions CrExportOptions;
                diskFileDestinationoptions CrdiskFileDestinationoptions = new diskFileDestinationoptions();
                PdfRtfWordFormatOptions CrFormatTypeOptions = new PdfRtfWordFormatOptions();
                ExcelDataOnlyFormatOptions CrExcelFormatTypeOptions = new ExcelDataOnlyFormatOptions();
                
                string fileName;

                byte[] bytes;
                
                CrExportOptions = cryRpt.ExportOptions;
                {
                    CrExportOptions.ExportDestinationType = ExportDestinationType.diskFile;
                    CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
                    CrExportOptions.Destinationoptions = CrdiskFileDestinationoptions;
                    CrExportOptions.FormatOptions = CrFormatTypeOptions;
                }
                
                System.IO.Stream oStream = null;
                
                oStream = cryRpt.ExportToStream(ExportFormatType.PortableDocFormat);
                byteArray = new byte[oStream.Length];
                oStream.Read(byteArray,Convert.ToInt32(oStream.Length - 1));

            }
            catch (Exception ex)
            {
                WriteFile(ex.ToString());
            }
            finally
            {
                cryRpt.Close();
                cryRpt.dispose();
            }
            return byteArray;
            
        }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)