我正在实现一个简单的HttpModule,我想在Web应用程序启动时运行一些代码.但是我很惊讶地发现,通常来自Global.asax的Application_Start事件不能从HttpModule获得.这是正确的,还是我在这里遗漏的东西?
如何从HttpModule钩入Application_Start事件?
更新:
我使用Init事件来简单的解决方案,但是它仍然对我有点好笑.
解决方法
您可以使用HttpModule来处理应用程序启动事件
与其他人相反,只写/相信他们阅读的内容,我已经完成了自己的工作,发现可以使用HTTP模块处理应用程序开始.这真的是一个黑客,但它可靠地工作.这绝对不是人们应该避免的事情,因为我已经在MS模块中看到了这一点(即Sharepoint 2010 SPRequestModule)我的这个博客(Writing a custom IHttpModule that handles Application_Start event)将为您提供您需要了解的所有信息.我自己做了,它只是工作.但是,在使用常见资源时您必须要小心,因为您的应用程序可能开始行为奇怪.为了避免这种情况,我建议你阅读我的additional blog post,这就解释了为什么会发生这种情况,以及如何避免这种情况.
如果您希望它也是线程安全的,您还可以锁定执行,然后在应用程序启动时标记模块.这是最安全的做法.
private static bool isStarted = false; private static object moduleStart = new Object(); ... if (!isStarted) { lock(moduleStart) { if (!isStarted) { // handle aplication start ... isStarted = true; } } }
我创建了我自己的库,它挂钩到现有的应用程序,如Sharepoint 2010.我不想改变Sharepoint的Global.asax现在吗?使用博客文章中解释的技术,我能够勾勒出来.容易.
我想这正是你一直在寻找的.通过在web.config中添加一个模块来挂起任意应用程序的启动事件.这样做它会奏效