Report Service中报 RSClientController 未定义
为了一个report service部署问题搞的头大,特意写下来,防止自己忘了.
环境:
report 服务器: win2008 64位
web 服务器: win2008 + iis7
开发时一切正常,第一次部署也没问题(所有的都在1台服务器上),将web应用部署到另外一台单独的服务器上问题来了
页面上不停的报:
RSClientController 未定义 这样的错误, 很多,没有一一记录.
一查,原来网页中引用很多类似 Reserved.ReportViewerWebControl.axd?OpType=Resource& Version=9.0.30729.1& Name=Microsoft.Reporting.WebForms.Scripts.ReportViewer.js的URL,用来载入控件所需的 JS、图档等等,但全部传回HTTP 404,以找不到档案收场,看来是Reserved.ReportViewerWebControl.axd这个HttpHandler没被正确地注册所 致。
从网上查资料得知,vs 2008在你拖入ReportViewer时会自动在web.config的system.web中加入HttpHandler Mapping:
<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" /> <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" />
但问题来了,在 IIS7上ASP.NET有两种执行模式,Classic Mode及Integrated Mode,web.config里HttpHandler等设定也变成有两区,system.web是给Classic Mode用的,system.webServer是给Integrated Mode用的。
VS2008自 动加入HttpHandler设定只改了system.web区(大概是因为IIS7比VS2008晚发展),却没一并在 system.webServer区新增设定,而我的WebApp设定是用Integrated Mode执行,这下子等于没注册Reserved.ReportViewerWebControl.axd,自然以HTTP 404收场。
在system.webServer加入以下的 HttpHandler设定:
<add name="Reserved-ReportViewerWebControl-axd" path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" resourceType="Unspecified" preCondition="integratedMode" /> <add name="Reserved-ReportViewerWebControl-axd" path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture= neutral, PublicKeyToken=b03f5f7f11d50a3a" resourceType="Unspecified" preCondition="integratedMode" />
问题解决