信息: 应用程序实例、 应用程序事件并在 ASP.NET 应用程序状态

文章翻译 文章翻译
文章编号: 312607 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

ASP.NET HttpApplication 对象隐藏许多复杂的概念来简化编程模型。本文介绍的这些复杂一些。此外,这篇文章介绍了 ASP.NET 如何处理与传统的 Microsoft 活动服务器页面 (ASP) 应用程序 对象的兼容性问题。

本文分为以下几节:

更多信息

应用程序类和应用程序实例

一个应用程序类是在 Global.asax 文件中定义的。在 Global.asax 代码定义的由 System.Web.HttpApplication 派生新类。如果不存在 Global.asax 文件,基类 HttpApplication,用作应用程序类。

ASP.NET 运行库创建应用程序类,同时处理请求所需的任意多个的实例。对于大多数的应用程序而言此数目的线程数仅限于并且仍保留在 1 和具体取决于硬件、 服务器负载、 配置,和等等的 100 之间的范围中。许多请求重用应用程序实例,并应用程序实例的可用列表一直保持减少负载的期间。以线程安全方式,也就是一个请求一次使用应用程序实例。这有重要的含义:
  • 您不必担心锁定时您访问的应用程序类的非静态成员。
  • 应用程序代码可以将为每个请求的请求数据存储在应用程序类的非静态成员 (不 EndRequest 事件之后,但由于此事件可能会维护请求长时间)。
由于包括一个应用程序类的任何类的静态成员不是线程安全,用户代码必须提供适当的锁定,用于访问静态成员。这适用于您添加到应用程序类的任何静态成员。

若要访问与当前请求关联的应用程序实例遵循以下准则:
  • 从 Global.asax,使用 的对象。
  • 从一页的每个页面包含强类型 ApplicationInstance 属性。
  • 使用从 HttpContext 对象的 (该类型作为 HttpApplicationHttpContext.ApplicationInstance 属性。
注意因为 应用程序 涉及到传统的 ASP 中全局应用程序状态词典,ASP.NET ApplicationInstance应用程序 的属性名以用作处理当前请求的应用程序实例,请参阅。

应用程序事件

请求的生存期由一系列的应用程序事件 (和一些隐式的步骤,ASP.NET 实现) 组成。下面列出了这些事件以执行它们的顺序:
  1. BeginRequest
  2. AuthenticateRequest 事件
  3. DefaultAuthentication 内部事件
  4. AuthorizeRequest 事件
  5. ResolveRequestCache 事件
  6. 内部"处理程序映射"步骤 (当编译发生时, 都会创建一个页面实例)
  7. AcquireRequestState 事件
  8. PreRequestHandlerExecute 事件
  9. 内部的步骤,以"执行处理程序"(当执行页代码)
  10. PostRequestHandlerExecute 事件
  11. ReleaseRequestState 事件
  12. 内部的步骤,为筛选器响应 UpdateRequestCache 事件
  13. UpdateRequestCache 事件
  14. EndRequest 事件
注意如果您使用 Server.TransferResponse.Redirect(string),当前请求有效地被中断,并且将不会引发一些上面列出的事件。但是,EndRequest 事件将在这种情况下引发。

以下各项可以处理这些事件:
  • 内部的 ASP.NET 页框架 (例如对于步骤 6、 9 和上述列表中的 12)。
  • 为应用程序配置的 HTTP 模块。默认的 HTTP 模块的列表是在 Machine.config 文件中定义的。
  • 在 Global.asax 的通过 启用 EventName Application_ 方法挂钩,或当您添加一个替代的处理程序名称的事件处理程序时显式挂钩的代码。
每个事件可以有同步和异步订阅服务器。 第一次执行异步的订阅服务器。并非所有事件都始终都执行 ; 只始终都执行的事件是 EndRequest。如此一来,EndRequest 事件中执行所有的 after-request 清理操作。

注意在大多数的情况中实际的响应发送到客户端后应用程序实例已完成,但该响应 (这是 EndRequest 后)。

Application_OnStart 和 Application_OnEnd

ASP.NET 引入与传统的 ASP 的兼容性的唯一 Application_OnStartApplication_OnEnd"事件"。这些"事件"一次只能执行生命周期的应用程序而不是针对每个应用程序实例中。因此,如果更改了这些方法中的非静态成员可以影响只能有一个应用程序实例和不是所有的实例。您可以初始化一个应用程序实例构造函数中或通过重写 Init 方法。

Application_OnStart 是为应用程序类的类构造函数将逻辑等效项,但它提供了一个优点: 该代码有 HttpContext 对应用程序在首次请求的访问。

应用程序状态

应用程序状态是传统的 ASP 引入了以补偿 Microsoft Visual Basic 脚本版 (VBScript) 中的全局变量的缺勤的后期绑定对象的全局字典。在 ASP.NET 中,您可以通过以下方式之一来访问应用程序状态:
  • 应用程序 属性 (它在 HttpApplication 类中定义)
  • HttpContext.Application
ASP.NET 包括主要用于与传统的 ASP 的兼容性的应用程序状态,使其更方便地迁移到 ASP.NET 的现有应用程序。建议您将数据存储在 应用程序 对象中而不是应用程序类的静态成员。这可提高性能,因为您可以比您可以访问应用程序中的一项更快地访问一个静态变量词典。

从 Microsoft Visual C#.net 和 Microsoft Visual Basic.net 中的网页访问静态应用程序成员,必须使用 Global.asax 中的 ClassName 属性命名您的应用程序类。有关示例:
<%@ Application Language="C# | VB" ClassName="MyClass" %>
				
如果 MyStaticMember Global.asax 文件中名为静态成员,则可以访问该网页中使用 MyClass.MyStaticMember

属性

文章编号: 312607 - 最后修改: 2004年1月21日 - 修订: 5.3
这篇文章中的信息适用于:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
关键字:?
kbmt kbappdev kbhttpruntime kbinfo kbstate KB312607 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 312607
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

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