0

根据 Scott Hanselman 的一篇文章,我们在 Webforms 项目中始终将 runAllManagedModulesForAllRequests 选项设置为 false。

此外,我们还有一些成功运行的 routes.MapPageRoute 配置。

现在我们需要为我们的 webform 项目添加 ICS(互联网日历)支持。为了为用户创建一个干净、可读的 url,可以由 IHttpHandler 处理,我添加了以下内容:

routes.Add(new Route("ical/{username}/{somecheck}", new ICalHandler()));

现在,url 就是我们想要的方式,就像这样:

http://foo.com/ical/username/abc.ics

在 localhost(VS2012,Windows 8)上,runAllManagedModulesForAllRequests 可以为 false。

在测试服务器(Win2k8 R2、IIS7.5)上,我收到“找不到页面”错误。但是,当我启用 runAllManagedModulesForAllRequests 时,它可以工作。

如果一定要这样,那就这样吧。但我真的很想知道为什么......谁能解释我为什么需要启用这个设置?

提前谢谢了。

4

1 回答 1

0

来自 MSDN

对 IIS 7 进行的更新使 runAllManagedModulesForAllRequests 设置变得不必要,并且本机支持 ASP.NET 路由。(有关更新的信息,请参阅 Microsoft 支持文章有可用的更新,该更新使某些 IIS 7.0 或 IIS 7.5 处理程序能够处理 URL 不以句点结尾的请求。)如果您的网站在 IIS 7 上运行并且 IIS 具有已更新,您无需将 runAllManagedModulesForAllRequests 设置为 true。事实上,不建议将其设置为 true,因为它给请求增加了不必要的处理开销。当此设置为 true 时,所有请求(包括 .htm、.jpg 和其他静态文件的请求)也会通过 ASP.NET 请求管道。runAllManagedModulesForAllRequests 的默认设置为 false。如果网站' s 配置文件未明确将 runAllManagedModulesForAllRequests 设置为 true,当您在未安装 SP1 的 Windows 7 上运行网站时,IIS 7 将不包含所需的更新。结果,路由将不起作用,您将看到错误。如果您遇到路由无法正常工作的问题,您可以执行以下操作: 将 Windows 7 更新到 SP1,这会将更新添加到 IIS 7。安装前面列出的 Microsoft 支持文章中描述的更新。在该网站的 Web.config 文件中将 runAllManagedModulesForAllRequests 设置为 true。请注意,这会给请求增加一些开销。如果您遇到路由无法正常工作的问题,您可以执行以下操作: 将 Windows 7 更新到 SP1,这会将更新添加到 IIS 7。安装前面列出的 Microsoft 支持文章中描述的更新。在该网站的 Web.config 文件中将 runAllManagedModulesForAllRequests 设置为 true。请注意,这会给请求增加一些开销。如果您遇到路由无法正常工作的问题,您可以执行以下操作: 将 Windows 7 更新到 SP1,这会将更新添加到 IIS 7。安装前面列出的 Microsoft 支持文章中描述的更新。在该网站的 Web.config 文件中将 runAllManagedModulesForAllRequests 设置为 true。请注意,这会给请求增加一些开销。

于 2013-07-26T16:59:47.980 回答