由於換了服務器 所以網站要重新發布。
結果發布到新的服務器上的時候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 存在不存在”
當然這只是探討出來的結論。至於對錯就不知道了
如果有人知道真正的原因也請告訴一下在下謝謝。。。