"No Report Specified"错误的可能…

来源:互联网 发布:域名和ip反向解析 编辑:程序博客网 时间:2024/05/16 03:38

博客的ActiveReport系列的文章转自http://www.cnblogs.com/longer/ 的原创心得,感谢博主的系列文章对我在项目中的帮助!

ActiveReport报表的问题的,就是在查看报表时,有时会出现"NoReportSpecified"的情况.除了这个提示信息之外,报表的内容什么也不显示.故障出现的概率比较随机,没有什么特别的规律.经过自己的摸索,目前暂时不出现这种错误了,不知道是否是最终解决方案.不过还是先在此记录下来,哪位有更好的解决方案,也希望告诉我一声.
  首先,是上google查的,找到了ActiveReport的官方网站有关这个问题的回复,地址是:http://www.datadynamics.com/forums/109470/PrintPost.aspx.硬着头皮啃了下英文,大意明白了,不过有关这个问题,最后官方网站也没给出明确的答案.大概的说法是发生这种错误的可能原因是"ASP.NET进程循环后者iis重启导致缓存中的报表丢失,造成报表不能显示,因此,建议设置iis的应用程序池以解决这个问题."由于我的开发机器的iis版本是5.1,没有"应用程序池"的设置,只有"应用程序保护"的设置,将"应用程序保护"级别调为"高",重启iis后,发现偶尔还是会出现"NoReport Specified"的情况.在这页回复中,官方给的一个解释是先确认HttpHandlers配置正确,在这个链接对应的页中,我看到如下说明:
  
从中我们可以看出,这个解决方案主要是针对报表可以在Html viewer类型下正常显示,但是在AcrobatReaderviewer下显示为空的解决方案.其中说到对.ArCacheItem映射的动作限制权限为"GET,HEAD,POST,DEBUG".我当时是按它的官方文档的截图进行的动作限制设为"所有动作".会不会是这个问题呢,先修改一下吧.修改后的截图:
 
  修改后重启iis,再次测试,到目前为止还没发现"No Report Specified"错误.
 从官方文档及网站的说明来看,报表生成后是放到缓存里的,当iis重启或asp.net进程被停掉的时候,存储在缓存中的报表即全部丢失.因此官方网站建议为使用了ActiveReport的应用程序建立独立的应用程序池,同时可能由于某些操作会导致缓存中的报表丢失,因此,官方建议将.ArCacheItem映射限制权限为GET,HEAD,POST,DEBUG".当然这是在开发环境的设置,在生产环境中,应该限制为"GET,POST,HEAD"即可.
  另外我想说的是,要注意下WebViewer控件的两个属性:
 
 MaxReportRunTime:这个属性是设置报表生成的最大时间,单位为秒,默认为10秒,如果你的报表内容较多,网络速度又不是很快的话,建议把这个时间设的长点,比如我这里设的是30秒.
 SlidingExpirationInterval:这个属性是设置报表在缓存队列中存放的时间,默认为20分钟,超过这个时间时,缓存中的报表会丢失.
 还有一点值得注意的是,在官方文档有关WebViewer控件的Report的属性的描述中,有如下描述:"If the controlis being loaded in response to a client postback ( ) the propertywill not use the specified report. Instead the control uses apreviously cached copy of the report's Document in the WebCacheservice to supply speedy responses to clients. To force the clientto accept the new instance, call the ClearCachedReport property beforesetting this property. "大意是:当客户端的回发导致这个控件被重新加载的时候,该控件将不再使用指定的报表,而是使用WebCache中的前一次缓存的报表副本来响应客户端的请求,为了强制生成一个新的实例,在设置report属性前先调用ClearCacheReport方法.

0 0
原创粉丝点击