Tag: 集成管道模式

HttpModule.Init – 在IIS7集成模式下安全地添加HttpApplication.BeginRequest处理程序

我的问题类似但不完全相同: 为什么我的主机(softsyshosting.com)不支持BeginRequest和EndRequest事件处理程序? (我也读过其中引用的mvolo博客) 目标是成功地在IHttpModule.Init事件(或模块内部的任何地方)中挂钩HttpApplication.BeginRequest,使用通过system.webServer配置集成的普通HttpModule,即不会: 入侵Global.asax或 覆盖HttpApplication(该模块旨在自包含和可重用,所以例如我有这样的配置): 到目前为止,我试图将一个侦听器附加到HttpApplication.BeginRequest的任何策略都会产生以下两种情况之一:症状1是BeginRequest永远不会触发,或者症状2是所有托管请求都抛出以下exception,我不能从用户代码中捕获并处理它: Stack Trace: [NullReferenceException: Object reference not set to an instance of an object.] System.Web.PipelineModuleStepContainer.GetEventCount(RequestNotification notification, Boolean isPostEvent) +30 System.Web.PipelineStepManager.ResumeSteps(Exception error) +1112 System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb) +113 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +616 在app.BeginRequest += new EventHandler(this.OnBeginRequest)当然会停止exception。 Init根本不引用Context或Request对象。 我试过了: 在项目的任何位置删除了对HttpContext.Current的所有引用(仍然是症状1) 测试从我的OnBeginRequest方法的主体中删除所有代码,以确保问题不在方法的内部(=exception) 嗅探堆栈跟踪并仅调用app.BeginRequest + = …如果堆栈未由InitializeApplication启动(= BeginRequest未启动) 只在第二次通过Init时调用app.BeginRequest + =(= BeginRequest未激活) […]