mayinfei 发表于 2021-4-14 09:28:32

发布后过一段时间报表就不能正常显示

本帖最后由 Crystal.Li 于 2021-4-14 09:47 编辑

现在碰到的情况是发布了正式环境到客户之后,在客户服务器上面刚部署完毕是正常显示的,然后过了一段时间之后(具体时间未计算)再次用同样的数据查看报表,报表会提示“渲染文档内容失败”点击详细就会提示“未将对象引用至对象的实例”。现阶段解决的方法只能重启IIS,但是需要查找具体原因。还望能协助调查。

Crystal.Li 发表于 2021-4-14 09:54:54

您好,可以看一下您这边工程里边 Document_LocateDataSource 方法是怎么写的吗?现在可能有这两方面的原因:
1、Document_LocateDataSource 这个方法可能写的有问题,导致dataTable获取数据失败;
2、然后您这个报表设计也相对挺复杂的,有可能就是报表设计问题。

第一个问题您可以先在本地试下,删除现有的报表设计,还是用原来的数据,拖一个简单的数据表,看是否都是正常的。如果正常可能就是报表设计原因。

mayinfei 发表于 2021-4-14 10:01:36

其实其中一个报表就是很简单的报表,也是同样的问题。问题不在于报表,数据源的数据肯定也是相对固定的,不会有太大的变化的。

Crystal.Li 发表于 2021-4-14 10:04:50

mayinfei 发表于 2021-4-14 10:01
其实其中一个报表就是很简单的报表,也是同样的问题。问题不在于报表,数据源的数据肯定也是相对固定的,不 ...

那您发一下您这边工程里边 Document_LocateDataSource 方法是怎么定义的

mayinfei 发表于 2021-4-14 10:06:10

app.UseReporting(settings =>
            {
                settings.UseCompression = true;
                settings.UseCustomStore(GetReport);//使用UseCustomStore来自定义一些需要的值
                //string path = System.Web.Hosting.HostingEnvironment.MapPath("~/");
                //settings.UseFileStore(new DirectoryInfo(@"" + path + "Reports"));
                //settings.UseFileStore(new DirectoryInfo(String.Format(@"{0}.\Reports", System.Web.HttpRuntime.AppDomainAppPath)));
                //settings.UseFileStore(new DirectoryInfo(@"E:\\vssdata\\NGK_WebWork\\WebWork2.Web\\Reports"));
                settings.LocateDataSource = args =>
                {
                  if (args.Report.Name.ToString() == "ReportDemo4.rdlx")
                  {
                        if (args.DataSet.Query.DataSourceName == "DataSource")
                        {
                            if (args.DataSet.Name == "shengchanshiji")
                            {
                              return GetData2();
                            }

                            if (args.DataSet.Name == "tiaozhengshijian")
                            {
                              return GetData();
                            }

                            if (args.DataSet.Name == "qitashijian")
                            {
                              return GetData3();
                            }

                            if (args.DataSet.Name == "tiaozhengpinfan")
                            {
                              return GetData4();
                            }

                            if (args.DataSet.Name == "guzhangjilu")
                            {
                              return GetData5();
                            }
                        }
                        return null;
                  }
                  else if (args.Report.Name.ToString() == "ReportDemo2.rdlx")
                  {
                        if (args.DataSet.Query.DataSourceName == "DataSource")
                        {
                            if (args.DataSet.Name == "DataSetBuLiangPin")
                            {
                              return GetData6();
                            }
                        }
                        return null;
                  }
                  else
                  {
                        return null;
                  }

                };
                //settings.UseCompression = true;
            });
            RouteTable.Routes.RouteExistingFiles = true;
            ConfigureAuth(app);

Crystal.Li 发表于 2021-4-14 11:16:17

您在您这个LocateDataSource 方法调用的时候加一行 释放内存的代码:
    args.Report.Dispose();//释放内存
目前的话,考虑如果不是报表设计和数据问题,应该是内存占用满了导致出错。
因为每次重启会释放内存,所以重启之后就会正常。报表渲染与您部署的机器配置也有关系,配置可能有点低,所以您每次调用的时候释放一下内存应该可以解决~~

mayinfei 发表于 2021-4-15 16:17:52

这个代码加在哪里比较合适呢,我这里加了之后报表都不能正常显示了

James.Lv 发表于 2021-4-15 18:34:27

mayinfei 发表于 2021-4-15 16:17
这个代码加在哪里比较合适呢,我这里加了之后报表都不能正常显示了
您好,代码加在下面截图的位置

mayinfei 发表于 2021-4-19 13:49:38

如果放在这这个地方的话报表直接就异常了:Q

Crystal.Li 发表于 2021-4-19 14:01:40

mayinfei 发表于 2021-4-19 13:49
如果放在这这个地方的话报表直接就异常了

具体是什么异常,有报错或者截图吗
页: [1]
查看完整版本: 发布后过一段时间报表就不能正常显示