注意IIS 7.0的集成管道模式下HttpApplication 请求管道事件的问题

今天打算把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 请求管道事件(如 BeginRequestEndRequest)的事件处理程序。

  • 请确保您已解决 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全部不起作用,找不到路径,我开始试图修改处理程序映射中的“检查文件是否存在”取消打勾,不过却找不到该选项。
后来发现换成经典管道模式也正常了。这里记录一下,给有相同问题的朋友提个醒。

你可能感兴趣的:(注意IIS 7.0的集成管道模式下HttpApplication 请求管道事件的问题)