在HttpModule中挂钩到Application_Start

Jak*_*ade 10 .net c# vb.net asp.net httpmodule

我正在实现一个简单的HttpModule,我想在Web应用程序启动时运行一些代码.但我很惊讶地发现我通常从Global.asax使用的Application_Start事件不能从HttpModule获得.这是正确的,还是我错过了什么?

如何从HttpModule挂钩到Application_Start事件?

更新:
我使用Init事件来解决简单的问题,但它对我来说仍然有点滑稽.

Rob*_*nik 29

您可以使用它HttpModule来处理应用程序启动事件

与其他只写/相信他们阅读的内容相反,我已经完成了自己的工作,并发现可以使用HTTP模块处理应用程序启动.这真的是一个黑客,但它可靠地工作.它绝对不是某人应该避免的东西,因为我也在MS模块中看到它(即Sharepoint 2010 SPRequestModule)我的这篇博文(编写一个处理Application_Start事件的自定义IHttpModule)将为您提供您需要了解的所有信息这个.我自己完成了它,它只是有效.但是在使用公共资源时必须要小心,因为您的应用程序可能会开始表现得很奇怪.为了避免这种情况,我建议你阅读我的另一篇博文,解释为什么会发生这种情况以及如何避免这种情况.

如果您希望它也是线程安全的,您还可以锁定执行,然后在应用程序启动时标记模块.这是最安全的方式.

private static bool isStarted = false;
private static object moduleStart = new Object();
...
if (!isStarted)
{
    lock(moduleStart)
    {
        if (!isStarted)
        {
            // handle aplication start
            ...
            isStarted = true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我创建了自己的库,可以挂钩现有的应用程序,比如Sharepoint 2010.我现在不想改变Sharepoint的Global.asax吗?使用博客文章中解释的技术,我能够加入其中.容易.

我想这正是你一直在寻找的.通过添加模块挂钩到任意应用程序的启动事件web.config.这样做吧.它会工作.