注意IIS 7.0的集成管道模式下HttpApplication 请求管道事件的问题
2008-11-15 22:53 BAsil 阅读(848) 评论(0) 编辑 收藏 举报今天打算把Community Server 2.0在vista IIS 7.0下跑起来,设置完虚拟目录后浏览,发现HttpContext.Current.Request抛出了System.Web.HttpException,检查了一下IIS下设置成集成管道模式,换成经典管道模式,则不抛出异常,百思不得其解,后来发现msdn上有如下一段话
不包含自定义模块或处理程序的 Web 应用程序通常无需更改即可在 IIS 7.0 集成模式下正常工作。对于依赖于自定义模块或处理程序的 Web 应用程序,需要执行以下步骤来使其能够在集成模式下运行:
使用本主题稍后的将 Web Config 文件迁移到集成模式部分中描述的方法之一,在 Web.config 文件的 system.webServer 节中注册自定义模块和处理程序。
仅在自定义模块的 Init 方法中定义 HttpApplication 请求管道事件(如 BeginRequest 和 EndRequest)的事件处理程序。
请确保您已解决 Upgrading ASP.NET Applications to IIS 7.0: Differences between IIS 7.0 Integrated Mode and Classic mode(将 ASP.NET 应用程序升级到 IIS 7.0:IIS 7.0 集成模式和经典模式之间的区别)的“Known Differences Between Integrated Mode and Classic Mode”(集成模式和经典模式之间的已知区别)部分中讨论的问题。
而CommunityServer 的写法如下
Global.ascx.cs
protected void Application_Start(Object sender, EventArgs e)
{
Jobs.Instance().Start();
EventLogs.Info("CS.Web Started", "Application", 200);
}
Jobs会调用HttpContext.Current.Request,在集成管道模式下抛出异常。
还有一个问题,在集成管道模式下涉及到CS的url rewriting全部不起作用,找不到路径,我开始试图修改处理程序映射中的“检查文件是否存在”取消打勾,不过却找不到该选项。
后来发现换成经典管道模式也正常了。这里记录一下,给有相同问题的朋友提个醒。