有人可以解释为什么在应用程序启动时会多次调用派生自 HttpApplication 的自定义类的构造函数吗?
我的代码结构如下:
- global.asax中的全局类来自 CustomApp 类。
- CustomApp 类派生自 HttpApplication 类
全局类是在启动时创建的,但是当我在构造函数中放置断点时,会多次调用它!我认为应该只创建一个应用程序类的实例?
我错了吗?
UPD :Web服务器确实可以创建多个 HttpApplication 实例来处理同时进入的多个请求。当您在 HttpApplication 后代的构造函数中放置断点时,这一点尤其明显。客户端将要处理几个请求(http内容,CSS文件等),并为每个请求服务,Web服务器将创建HttpApp的新实例。所以,在编写应用程序初始化逻辑时要注意这一点。
答案 0 :(得分:15)
我相信ASP.NET运行时可能会为每个应用程序域创建多个HttpApplication。因此,HttpApplication.Init和Ctor可能不止一次被调用。
如果您想拥有仅运行一次的初始化代码,则应使用Application_Start事件,该事件仅在每个应用程序中调用一次。
答案 1 :(得分:6)
请查看帖子global.asax in ASP.NET - 它解释了为什么有多个HttpApplication实例。基本上有两个池:特殊和正常。普通池包含请求使用的HttpApplication实例(每个请求都有自己的HttpApplication实例)。特殊池包含用于应用程序级事件的HttpApplication对象(如Application_Start,Application_Error)。