2009-06-06 48 views
21

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

我的代码结构如下:
- 我全球类Global.asax中派生从CustomApp类。
- 该CustomApp类从的HttpApplication

全球类是在启动时创建的派生,但是当我把一个断点在构造函数,调用它几次!我以为应该只有一个应用程序类创建的实例吗?

我错了吗?

UPD:Web服务器确实可以创建几个的HttpApplication实例来处理在同一时间进来的多个请求。当您在后代的构造函数中放置断点时,这会变得尤为明显。一些请求将从客户端(http内容,CSS文件等)中挂起,并为它们提供服务,Web服务器将创建HttpApp的新实例。所以,在编写应用程序初始化逻辑时要小心这一点。

+0

是否可以发布显示此行为的精简代码片段? – 2009-06-06 06:21:19

回答

15

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

如果您想要只有一次运行的初始化代码,则应该使用Application_Start事件,该事件仅在每个应用程序中调用一次。

+0

是否有一个事件(或类似),我可以挂钩为Applcation_Start,因为我需要我的网站以外的HttpApplication类? – 2010-01-27 16:37:53

+1

只需在Global.asax.cs中实现一个`Applcation_Start`方法,它将在开始时自动连线并调用。 http://msdn.microsoft.com/en-us/library/ms178473.aspx – mckamey 2010-01-28 08:02:20

6

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

相关问题