22

有人可以解释为什么在应用程序启动时多次调用从HttpApplication派生的自定义类的构造函数吗?

我的代码结构如下:
- 我在 global.asax 中的Global类派生自CustomApp类。
- CustomApp类派生自HttpApplication

Global类是在启动时创建的,但是当我在构造函数中放置断点时,它会被多次调用!我认为应该只创建一个Application类的实例?

我错了吗?

UPD:Web 服务器确实可以创建多个HttpApplication实例来处理同时进入的多个请求。当您在HttpApplication后代的构造函数中放置断点时,这一点变得尤为明显。来自客户端的多个请求(http 内容、CSS 文件等)将处于未决状态,并且为了为每个请求提供服务,Web 服务器将创建 HttpApp 的新实例。因此,在编写应用程序初始化逻辑时,请注意这一点。

4

2 回答 2

16

我相信 ASP.NET 运行时可能会为每个应用程序域创建多个 HttpApplication。所以 HttpApplication.Init 和 Ctor 可能会被多次调用。

如果你想让初始化代码只运行一次,你应该使用 Application_Start 事件,每个应用程序只会调用一次。

于 2009-06-07T00:52:26.787 回答
8

请查看ASP.NET 中的 global.asax帖子- 它解释了为什么有多个 HttpApplication 实例。基本上有两个池:特殊池和普通池。普通池包含请求使用的 HttpApplication 实例(每个请求都有自己的 HttpApplication 实例)。特殊池包含用于应用程序级事件(如 Application_Start、Application_Error)的 HttpApplication 对象。

于 2011-08-05T13:56:45.643 回答