最近在.net下用Vs2005自带的水晶报表做了一个报表批量生成的程序,在本机运行没有问题,放到服务器上却发生了很多问题,我现在把这些发生的问题和解决方案记录下来,一方面给自己学习过程留个记录,另一方面也给遇到同样问题的朋友们提供一个解决问题的参考。
首先,要在服务器安装CRRedist2005_X64.msi CRRedist2005_X64_CHS.msi CRRedist2005_x86.msi CRREdist2005_x86_chs.msi这几个文件,因为我们的服务器是Win2003,所以我选择了CRRedist2005_x86.msi ,CRREdist2005_x86_chs.msi这两个文件进行安装。这个是必须安装的,否则页面会报以下错误:
未能加载文件或程序集“CrystalDecisions.ReportAppServer.CommLayer, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304”或它的某一个依赖项。系统找不到指定的文件。
另外,要把C:/Program Files/Common Files/Business Objects/2.7/Managed 下所有的文件都COPY到服务器网站的BIN目录下,这一步也是必要的,否则页面会报以下错误:
未能加载文件或程序集“CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304”或它的某一个依赖项。系统找不到指定的文件。
如果水晶报表工具条无法显示,图片变成一个一个红叉,那我们还需要把本机C:/Inetpub/wwwroot下的aspnet_client目录copy到服务器网站根目录下。
以上功课做完了,按理说水晶报表应该可以正常运行了,但是打开页面又跳出来一个错误:
文件 UNKNOWN.RPT 内出错:无法将请求提交给后台处理。
在网上搜了一下,应该是因为
“出现这个错误的主要原因是水晶报表引擎没有权限生成报表。查看了一个服务器的权限设置,发现C盘的根目录Users组没有权限,只要把Users组设置为对C盘有写入的权限问题就解决了。如果认为User组对整个C盘有写入权限不安全,也可以把Temp目录设为有写入权限,问题也可以解决。
初步估计水晶报表引擎可能要在Temp目录里生成一些临时的交换文件,所以需要C盘Temp目录的操作权限。”