ИНФОРМАЦИЯ: Экземпляры приложения, приложения и события состояния приложения в ASP.NET

Переводы статьи Переводы статьи
Код статьи: 312607 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

ASP.NETHttpApplicationобъект скрывает многие сложные концепции для упрощения модели программирования. В данной статье описаны некоторые из этих сложностей. Кроме того в данной статье описывается, как ASP.NET обрабатывает проблемы совместимости с классической Microsoft Active Server Pages (ASP)ПриложениеОбъект.

Статья состоит из перечисленных ниже разделов.:

Дополнительная информация

Класс приложения и экземпляры приложения

Класс приложения, определенные в файле Global.asax. Код в Global.asax определяет новый класс, производный отSystem.Web.HttpApplication. В случае отсутствия файла Global.asax, базовый классHttpApplication, используемый в качестве класса приложения.

Среда выполнения ASP.NET создает столько экземпляров классов приложения, необходимые для обработки запросов одновременно. Для большинства приложений это число не может превышать количество потоков и остается в диапазоне от 1 до 100, в зависимости от оборудования, нагрузку на сервер, конфигурации и т. д. Большое количество запросов, повторное использование экземпляра приложения и свободный список экземпляров приложения хранится в периоды сниженной нагрузки. Экземпляры приложения используются в виде поточно ориентированными, т.е., одного запроса одновременно. Это имеет важные последствия:
  • Не нужно беспокоиться о блокировки при доступе к нестатическим членам класса приложения.
  • Код приложения могут хранить данные запроса для каждого запроса в нестатические члены класса приложения (но не послеEndRequestevent because this event may maintain the request for a long time).
Because static members of any class, including an application class, are not thread-safe, the user code must provide appropriate locking for access to static members. This applies to any static member that you add to the application class.

Use the following guidelines to access the application instance that is associated with the current request:
  • From the Global.asax, use thethis-или-MeОбъект.
  • From a page, every page includes a strongly-typedApplicationInstanceСвойство.
  • ИзHttpContextobject, use theHttpContext.ApplicationInstanceproperty (which you type asHttpApplication).
Примечание.Так какПриложениеrefers to the global application state dictionary in classic ASP, ASP.NET usesApplicationInstanceand notПриложениеas a property name to refer to the application instance that processes the current request.

Application Events

The lifetime of a request consists of a series of the application events (and some implicit steps that ASP.NET implements). These events are listed below in the order in which they are executed:
  1. BeginRequest
  2. AuthenticateRequestСобытие:
  3. DefaultAuthenticationinternal event
  4. AuthorizeRequestСобытие:
  5. ResolveRequestCacheСобытие:
  6. Internal step to "map handler" (when compilation takes place, a page instance is created)
  7. AcquireRequestStateСобытие:
  8. PreRequestHandlerExecuteСобытие:
  9. Internal step to "execute handler" (when the page code is executed)
  10. PostRequestHandlerExecuteСобытие:
  11. ReleaseRequestStateСобытие:
  12. Internal step to filter responsesUpdateRequestCacheСобытие:
  13. UpdateRequestCacheСобытие:
  14. EndRequestСобытие:
Примечание.If you useServer.Transfer-или-Response.Redirect(string), the current request is effectively interrupted and some of the events that are listed above will not be raised. Тем не менееEndRequestevent will be raised in this scenario.

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 theApplication_[On]EventNamemethod or that is hooked explicitly when you add event handlers for an alternative handler name.
Each event can have synchronous and asynchronous subscribers. Asynchronous subscribers are executed first. Not all events are always executed; the only event that is always executed isEndRequest. As a result, perform all after-request cleanup in theEndRequestСобытие:.

Примечание.In most cases, the actual response is sent to the client after the application instance is finished with the response (which is afterEndRequest).

Application_OnStart and Application_OnEnd

ASP.NET introduces the uniqueApplication_OnStartи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Инициализацияметод.

Application_OnStartis a logical equivalent to the class constructor for the application class, but it offers one advantage: the code has access to theHttpContextfor the first request to the application.

Application State

Application state is a global dictionary of late-bound objects, which classic ASP introduces to compensate for the absence of global variables in Microsoft Visual Basic Scripting Edition (VBScript). In ASP.NET, you can access application state through one of the following:
  • Приложениеproperty (which is defined in bothHttpApplicationиСтраницаclasses)
  • HttpContext.Application
ASP.NET includes application state primarily for compatibility with classic ASP so that it is easier to migrate existing applications to ASP.NET. It is recommended that you store data in static members of the application class instead of in theПриложениеОбъект. This increases performance because you can access a static variable faster than you can access an item in the Application dictionary.

To access static application members from pages in Microsoft Visual C# .NET and Microsoft Visual Basic .NET, you must use theClassNameattribute in Global.asax to name your application class. For example:
<%@ Application Language="C# | VB" ClassName="MyClass" %>
				
If a static member is namedMyStaticMemberin your Global.asax file, you can useMyClass.MyStaticMemberto access it from your page.

Свойства

Код статьи: 312607 - Последний отзыв: 23 ноября 2010 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
Ключевые слова: 
kbappdev kbhttpruntime kbinfo kbstate kbmt KB312607 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:312607

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com