好的,所以我正在使用旧的公司网站。我们在这里谈论经典的ASP。我有它在开发服务器上工作,但第二个它进入生产服务器服务器上的其他东西,如Web服务开始破坏。
所以基本上我添加了一个使用报表查看器控件的aspx页面。当我在Web配置文件中添加http处理程序时出现问题。因为站点的架构很复杂,我必须修改根Web配置文件,这会导致问题,因为子目录继承自根Web配置文件。
以下是我收到的错误
以下是我尝试过的,我认为可行的。
首先,我认为在Web配置文件中添加一个location元素是可行的,但是没有(当然),它没有注册http处理程序。这是一个错误。
<location path="activityreport.aspx">
<system.web>
<httpHandlers>
<add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>
</httpHandlers>
</system.web>
</location>
接下来我想我会将aspx文件移动到一个子目录中并给它自己的web配置文件注册那里的http处理程序,但是它没有坚持
<system.web>
<httpHandlers>
<add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>
</httpHandlers>
</system.web>
我尝试过的一件事确实有效,但我不确定它是否会导致所有子文件夹继承该属性。
将位置路径设置为“。”
<location path=".">
<system.web>
<httpHandlers>
<add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>
</httpHandlers>
</system.web>
</location>
我的问题是......有没有办法以编程方式注册这个http处理程序。或者您可能发现我的网络配置设置有问题。
答案 0 :(得分:1)
您运行的解决方案将导致为Web根目录中或下面的Reserved.ReportViewerWebControl.axd
的所有请求调用处理程序。如果要将处理程序隔离到只能从根目录访问,请将条目添加到web.config中,并在路径的开头添加/:
<system.web>
<httpHandlers>
<add path="/Reserved.ReportViewerWebControl.axd"
verb="*"
type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
validate="false"/>
</httpHandlers>
</system.web>
如果要隔离单个子目录中的所有内容,请将条目添加到web.config,如下所示:
<system.web>
<httpHandlers>
<add path="/mysubdir/Reserved.ReportViewerWebControl.axd"
verb="*"
type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
validate="false"/>
</httpHandlers>
</system.web>
使用指定为:
的路径注册处理程序path="Reserved.ReportViewerWebControl.axd"
无论使用哪个子目录,都会导致对Reserved.ReportViewerWebControl.axd
的任何请求调用处理程序。
修改强>
在IIS6下,如果只希望Reserved.ReportViewerWebControl.axd
只能从根目录中获取,只需添加对处理程序的引用,如下所示。你应该只需要在路径元素的开头添加一个。
<system.web>
<httpHandlers>
<add verb="*"
path="/Reserved.ReportViewerWebControl.axd"
type="..." validate="false" />
</httpHandlers>
</system.web>
如果采用这种方法并且出现Could not load type 'Microsoft.Reporting.WebForms.HttpHandler'
错误,请尝试将以下内容添加到web.config
中的编译\程序集中(您可能还需要将该程序集添加到GAC中):< / p>
<system.web>
<compilation debug="true">
<assemblies>
<add assembly="Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
</compilation>
...
<httpHandlers>
...
</httpHandlers>
</system.web>
答案 1 :(得分:0)
请注意:我只在我们的生产环境中获得Could not load type 'Microsoft.Reporting.WebForms.HttpHandler'
。我将程序集添加到assemblies
下的<system.web>
部分,但仍然无效。然后在此基础上我回答我检查了机器上的全局程序集缓存(GAC)。原来该版本的Microsoft.ReportViewer.WebForms的版本是9.0.0.0,而不是8.0.0.0。我更新了web.config
中的那一行,但效果很好。谢谢!