This article is divided into the following sections:
The ASP.NET runtime creates as many instances of application classes as needed to process requests simultaneously. For most applications, this number is limited to the number of threads and remains in the range of 1 through 100, depending on the hardware, server load, configuration, and so on. Many requests reuse application instances, and a free list of application instances is kept during periods of reduced load. Application instances are used in a thread-safe manner, that is, one request at a time. This has important implications:
- You do not have to worry about locking when you access non-static members of the application class.
- Application code can store request data for each request in non-static members of the application class (but not after the EndRequest event because this event may maintain the request for a long time).
Use the following guidelines to access the application instance that is associated with the current request:
- From the Global.asax, use the this or Me object.
- From a page, every page includes a strongly-typed ApplicationInstance property.
- From the HttpContext object, use the HttpContext.ApplicationInstance property (which you type as HttpApplication).
- AuthenticateRequest event
- DefaultAuthentication internal event
- AuthorizeRequest event
- ResolveRequestCache event
- Internal step to "map handler" (when compilation takes place, a page instance is created)
- AcquireRequestState event
- PreRequestHandlerExecute event
- Internal step to "execute handler" (when the page code is executed)
- PostRequestHandlerExecute event
- ReleaseRequestState event
- Internal step to filter responses UpdateRequestCache event
- UpdateRequestCache event
- EndRequest event
The following items can handle these events:
- Internal ASP.NET page framework (for example, steps 6, 9, and 12 in the preceding list).
- HTTP modules that are configured for the application. The default list of HTTP modules is defined in the Machine.config file.
- Code in Global.asax that is hooked through the Application_[On]EventName method or that is hooked explicitly when you add event handlers for an alternative handler name.
Note In most cases, the actual response is sent to the client after the application instance is finished with the response (which is after EndRequest). Application_OnStart and Application_OnEnd "events" for compatibility with classic ASP. These "events" are executed only once in the lifetime of an application and not for every application instance. Therefore, if you change non-static members in these methods, you affect only one application instance and not all instances. You can initialize one application instance either in the constructor or by overriding the Init method.
Application_OnStart is a logical equivalent to the class constructor for the application class, but it offers one advantage: the code has access to the HttpContext for the first request to the application.
- Application property (which is defined in both HttpApplication and Page classes)
To access static application members from pages in Microsoft Visual C# .NET and Microsoft Visual Basic .NET, you must use the ClassName attribute in Global.asax to name your application class. For example:
<%@ Application Language="C# | VB" ClassName="MyClass" %>
Article ID: 312607 - Last Review: Jun 19, 2014 - Revision: 1