ActiveReport使用心得(五):"No Report Specified"错误的可能原因
2007-12-03 12:05
405 查看
本来今天想写一下ActiveReport的子报表的问题的,可是这几天在测试报表的时候,总被一个问题困扰着,那就是在查看报表时,有时会出现"No Report Specified"的情况.除了这个提示信息之外,报表的内容什么也不显示.故障出现的概率比较随机,没有什么特别的规律.经过自己的摸索,目前暂时不出现这种错误了,不知道是否是最终解决方案.不过还是先在此记录下来,哪位有更好的解决方案,也希望告诉我一声.
首先,是上google查的,找到了ActiveReport的官方网站有关这个问题的回复,地址是:http://www.datadynamics.com/forums/109470/PrintPost.aspx.硬着头皮啃了下英文,大意明白了,不过有关这个问题,最后官方网站也没给出明确的答案.大概的说法是发生这种错误的可能原因是"ASP.NET进程循环后者iis重启导致缓存中的报表丢失,造成报表不能显示,因此,建议设置iis的应用程序池以解决这个问题."由于我的开发机器的iis版本是5.1,没有"应用程序池"的设置,只有"应用程序保护"的设置,将"应用程序保护"级别调为"高",重启iis后,发现偶尔还是会出现"No Report Specified"的情况.在这页回复中,官方给的一个解释是先确认Http Handlers配置正确,在这个链接对应的页中,我看到如下说明:
从中我们可以看出,这个解决方案主要是针对报表可以在Html viewer类型下正常显示,但是在AcrobatReader viewer下显示为空的解决方案.其中说到对.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 control is being loaded in response to a client postback ( ) the property will not use the specified report. Instead the control uses a previously cached copy of the report's Document in the WebCache service to supply speedy responses to clients. To force the client to accept the new instance, call the ClearCachedReport property before setting this property. " 大意是:当客户端的回发导致这个控件被重新加载的时候,该控件将不再使用指定的报表,而是使用WebCache中的前一次缓存的报表副本来响应客户端的请求,为了强制生成一个新的实例,在设置report属性前先调用ClearCacheReport方法.
首先,是上google查的,找到了ActiveReport的官方网站有关这个问题的回复,地址是:http://www.datadynamics.com/forums/109470/PrintPost.aspx.硬着头皮啃了下英文,大意明白了,不过有关这个问题,最后官方网站也没给出明确的答案.大概的说法是发生这种错误的可能原因是"ASP.NET进程循环后者iis重启导致缓存中的报表丢失,造成报表不能显示,因此,建议设置iis的应用程序池以解决这个问题."由于我的开发机器的iis版本是5.1,没有"应用程序池"的设置,只有"应用程序保护"的设置,将"应用程序保护"级别调为"高",重启iis后,发现偶尔还是会出现"No Report Specified"的情况.在这页回复中,官方给的一个解释是先确认Http Handlers配置正确,在这个链接对应的页中,我看到如下说明:
从中我们可以看出,这个解决方案主要是针对报表可以在Html viewer类型下正常显示,但是在AcrobatReader viewer下显示为空的解决方案.其中说到对.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 control is being loaded in response to a client postback ( ) the property will not use the specified report. Instead the control uses a previously cached copy of the report's Document in the WebCache service to supply speedy responses to clients. To force the client to accept the new instance, call the ClearCachedReport property before setting this property. " 大意是:当客户端的回发导致这个控件被重新加载的时候,该控件将不再使用指定的报表,而是使用WebCache中的前一次缓存的报表副本来响应客户端的请求,为了强制生成一个新的实例,在设置report属性前先调用ClearCacheReport方法.
相关文章推荐
- ActiveReport使用心得(五):"No Report Specified"错误的可能原因(轉)
- "No Report Specified"错误的可能…
- 关于出现“使用 UNION、INTERSECT 或 EXCEPT 运算符合并的所有查询必须在其目标列表中有相同数目的表达式”错误的可能原因
- ORA-12154: TNS:could not resolve the connect identifier specified错误的可能原因
- 关于使用springmvc时Failed to load resource: the server responded with a status of 400 (Bad Request)错误可能原因
- 关于出现“使用 UNION、INTERSECT 或 EXCEPT 运算符合并的所有查询必须在其目标列表中有相同数目的表达式”错误的可能原因
- 报这个错误的原因:No identifier specified for entity:
- ActiveReport使用心得(六):"Printer does not support A4 papersize."错误的解决(轉)
- ReportViewer ...'Main Report' is invalid...错误另一可能原因
- [vue.js] prop验证没有错误信息的可能原因:没有使用开发者版本
- 使用Ext.Window时出现No center region defined in BorderLayout错误的愿原因
- 分析器错误信息: 在应用程序级别以外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。导致该错误的原因可能是在 IIS 中没有将虚拟目录作为应用程序进行配置。
- ActiveReport使用心得(六):"Printer does not support A4 papersize."错误的解决
- 提示如下错误:No space left ondevice,通过 df -h 查看磁盘空间,发现没满,请问可能原因是什么?
- 报这个错误的原因:No identifier specified for entity:
- 关于使用springmvc时Failed to load resource: the server responded with a status of 400 (Bad Request)错误可能原因
- 分析器错误信息: 在应用程序级别以外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。导致该错误的原因可能是在 IIS 中没有将虚拟目录作为应用程序进行配置。
- c#使用CsGL时一个小错误:“CsGL.OSLib”的类型初始值设定项引发异常 产生的原因
- DLL中用malloc分配了一块内存,但是在exe程序中释放引发的错误可能原因
- 关于"No result defined for action com.ccxe.credit.action.ReportAction and result input"的错误