ReportViewer控件无法显示(ASP.NET Ajax 客户端框架未能加载,"Sys"未定义)
由于换了服务器 所以网站要重新发布。
结果发布到新的服务器上的时候reportviewer却无法显示控件
一开始是用IE游览器游览的 找不都错误所在,以为是reportviewer 的问题
于是在网上搜索发现了很多关于这方面的内容
但是发现出现相关的情况 都是“reportviewer在IIS7无法显示”为主题的。
可是我的IIS是6.0版本的按理说不会出现这种情况。但是还是抱着试一下的想法 按照他们的解决方法试了下。
解决方法如下:
原因是因为IIS7.5读取web.config的方式改变了,不再读取<system.web>的<httpHandlerss>的设置,而是改成了读取<system.webServer>的<handlers>的设置。
<system.web> <httpHandlers> <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/> </httpHandlers> </system.web>
在IIS7.5下要改成如下:
<system.webServer> <handlers> <add name="ReportViewerWebControl" path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> </handlers> </system.webServer>
设置完成,报表可以正常显示
这边如果有是因为IIS7.0导致无法显示的朋友可以按照上面的方法试一下。
至于我。。当然没有成功了。
因为这边出现的情况是和我出现的一样的。。
所以我就条件反射的也以为是webconfig配置错误。。
结果浪费了一个晚上webconfig 都改烂掉了也没有解决掉。。。
第二天用火狐游览器的firdebug来检测了下
哇哈哈。。结果发现里面提示的是 "ASP.NET Ajax 客户端框架未能加载,"Sys"未定义"
恩开来这就是问题的根源了
于是就开始搜索这类问题的解决方案。。。
解决方案如下:
情况一:未设置编码
在<system.web>节点中加个 <globalization requestEncoding="utf-8" responseEncoding="utf-8"/> 就可以解决。
情况二:发布网站时没有添加引用(用VS2008会出现这样情况)
因为VS2008考虑到安全因素,没有在发布程序前添加System.Web.Extensions System.Web.Extensions.Design两个DLL,需自己添加.
情况三:WEBConfig配置问题
在web.config的system.web节中添加
<httpHandlers><remove path="*.asmx" verb="*"/><add verb="*" path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/><!--<add path="*_AppService.axd" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>--><add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/></httpHandlers><httpModules><add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></httpModules>
即可解决。
情况四:IIS配置问题
查看IIS的配置(如果不是本地就得联系空间服务商),在应用程序配置中查找.axd映射,如果没有就新建,映射路径和.aspx一样,注意不要勾选”检查文件是否存在“,确定后测试下效果。如果已存在映射就检查下路径是否正确以及有没有勾选”检查文件是否存在“,问题应该能够解决
基本上出现的都是上面这些情况。。
然后本人就一个个方法的试。。结果。。没有一个成功。。。
为什么没有成功呢?因为如果成功了也就没有下文了
然后本人就开始思考了
首先
老的两个服务器上面配置文件都没改
都是可以用的 然后补丁也都打了 webconfig也都改烂掉了
网上能找到的改webconfig的方法都试过了
然后今天早上就在那想 昨天肯定找错方向了
因为一开始是认为rdlc出错
后来想到是asp.net的ajax客户端出错 错不因该在rdlc 上 因为补丁这些也都打了
然后再把webconfig的问题也排除了 就只剩下 环境的问题了
而跟环境有关的问题的话就只有一个 就是axd的问题但是axd这边确认文件是否存在也已经去掉了所以还是不知道在哪里出错
后来仔细一看发现是这里的问题
在IIS上面的网站属性下面 会有个一个 通配符应用程序映射(执行顺序) 这里不知道为什么多了一个关于ASPNET_ISAPI.DLL的设置。
然后这边的“确认文件是否存在”被打上了勾。
然后去掉。。果然解决了问题
然后又尝试了发布几个新的网站发现在这个服务器上都会自动添加这里一条。同时确认文件是否存在都是打勾的。。而我们内部测试的服务器则没有这一项。
问题很坑爹。。但是终觉是解决了呵呵。。
之后与跟老师探讨了下得出了以下结论:
“简单来讲就是isapi是用来处理axd的 但实际上axd不存在 所以就出错 而他这里的判断 确认文件是否存在就 判断
isapi 处理的axd 存在不存在”
当然这只是探讨出来的结论。至于对错就不知道了
如果有人知道真正的原因也请告诉一下在下谢谢。。。