我有一个相当详细的问题,希望有人能提供帮助。基本上,我有一个托管在 IIS7 上的 .NET 4.0 网站,其中有一些需要重写 URL 的页面。为了实现这些功能,我在 global.asax 中添加了一个方法,该方法将无扩展名的 URL 映射到其正确的 ASPX 页面,然后执行 context.RewritePath 以显示正确的页面。
最初,我从 application_BeginRequest 调用此方法。但是,我们在调用 Session_Start 时会发生一些业务必要的日志记录,而且自从在 application_BeginRequest 中实现 URL 重写以来,这种日志记录似乎并不总是发生 - 基本上,每个会话都会记录在数据库中,并且在初始部署之后URL 重写后,我们的会话日志减少了大约 20%,应用程序日志中没有相应的错误。同时,我们的 IIS 日志似乎显示了相对不变的流量,所以在我看来,会话似乎没有正确实例化。
作为此问题的解决方法,我将 URL 重写从 application_BeginRequest 移至 application_AcquireRequestState,以便在我(大部分)确定会话已启动之前,此代码不会触发。这适用于我的本地开发环境和我们的登台服务器(Windows Server 2008 - IIS 7 - 安装了 .NET 4.5 框架)。在生产环境(Windows Server 2008 - IIS 7 - .NET 4.5 Framework)中,尝试浏览要重写的无扩展名 URL 时出现 404 错误。
我完全被难住了 - 我已经验证我正在使用集成应用程序池,我的 web.config 具有“runAllManagedModulesForAllRequests=true”属性,我的 IIS 功能包括 HTTP 重定向和静态文件压缩,但似乎没有任何工作. 我发现了一个使用 Classic 应用程序池的 hack,并创建额外的脚本映射处理程序来处理没有扩展名的通配符 URL,但我犹豫是否将其投入生产。
您能提供的任何帮助将不胜感激。谢谢!