ASP.NET的Application

1、Application的生存期

一个ASP.NET application创建于服务器第一次被请求时,在那之前不会有ASP.NET代码在执行。接受第一次请求后,一个HttpApplication实例池被创建,并激活了Application_OnStart事件。HttpApplication实例处理这个请求及随后发生的请求,直到最后的实例退出,接着就触发Application_OnEnd事件。
注意,在每一个实例中HttpApplication的Init以及Dispose方法都被调用,因此在Application_OnStart 和 Application_OnEnd事件间将被调用多次。在一个ASP.NET application中,只有这些事件在所有HttpApplication实例中被共享。

2、关于多线程(加锁)

如果我们以application范围类型使用对象,我们就应该注意ASP.NET是并发处理请求的,从而Application对象可以被多个线程所访问。因此,如果下面例子中的代码在同一时间被不同的客户机访问,它就是危险的,可能不会达到预期目的。为对照方便,我们列出了使用VB、C#以及JScript三种语言编写的代码:
C#
<%
Application["counter"] = (Int32)Application["counter"] + 1;
%>
VB
<%
Application("counter") = CType(Application("counter") + 1, Int32)
%>

为了实现安全的线程处理,我们可以通过Lock和Unlock方法处理这个Application对象。请看下面使用VB、C#以及JScript三种语言编写的代码:
C#
<%
Application.Lock();
Application["counter"] = (Int32)Application["counter"] + 1;
Application.UnLock();
%>

VB
<%
Application.Lock()
Application("counter") = CType(Application("counter") + 1, Int32)
Application.UnLock()
%>

3、文件Global.asax

除了编写UI(Use Interface:用户界面)以外,我们还可以在Web Application中添加"application"级别的控制逻辑代码以及事件触发程序。这些代码不会去操作产生UI,并且基本上不会响应于单独的页面请求,它们负责的是处理高级别的application事件,包括Application_Start、Application_End、Session_Start和Session_End。这些控制逻辑代码位于Web

application所在虚拟目录结构根目录下的Global.asax文件中,ASP.NET自动地解析这个文件并编译为动态.NET框架类。这个类扩充了HttpApplication基类,当位于application名字空间内的任意资源或URL被首次访问时,它就被创建。

Global.asax文件本身经过了设置,任何关于它的直接URL请求都会被自动拒绝,从而保证了外部用户无法下载它并浏览其内容。

Application 或 Session作用范围内的事件

我们可以在Global.asa文件中编写方法以定义有关HttpApplication基类的事件触发程序,方法的命名要匹配于字符串"Application_事件名称"。比如,请看下面使用VB、C#以及JScript三种语言编写的代码:

C#
<script language="C#" runat="server">
void Application_Start() {
// Application startup code goes here
}
</script>

VB
<script language="VB" runat="server">
Sub Application_Start()
’ Application startup code goes here
End Sub
</script>

下面的例子图解了Application、Session 和Request 的生存期:

页面首次打开时,将激活application和session的Onstart事件。关于这些事件触发程序,请看下面使用VB、C#以及JScript三种语言编写的代码:

C#
void Application_Start() {
Response.Write("Application is Starting...");
}
void Session_Start() {
Response.Write("Session is Starting...");
Session.Timeout = 1;
}

VB

Sub Application_Start()
Response.Write("Application is Starting...")
End Sub
Sub Session_Start()
Response.Write("Session is Starting...")
Session.Timeout = 1
End Sub

每次请求发生时,都会激活BeginRequest 和EndRequest 事件。比如,当页面被刷新时,来自BeginRequest、EndRequest

和Page_Load 方法的信息将显现出来。注意,当放弃当前的session时(点击"End this session"按钮),将产生一个新session,接着再次触发Session_OnStart事件。

ASP.NET的Application相关推荐

  1. Creating a LINQ Enabled ASP.NET Web application template using C#.[转]

    原文地址:http://www.wwwcoder.com/Weblogs/tabid/283/EntryID/839/Default.aspx 其他相关地址:Building and using a  ...

  2. ASP.NET中application对象的用法(面试题)

    ASP.NET中application对象的用法 本文导读:Application对象是HttpApplicationState类的一个实例,Application状态是整个应用程序全局的.Appli ...

  3. 学习ASP.NET-初探Application状态

    学习ASP.NET-初探Application状态 - 上一篇<浅谈TeeChart组件在ASP中的应用>下一篇<用IS6进行ASP软件的打包和自动安装(补充)>字体: 小|中 ...

  4. php 实现application,PHP中实现ASP中的Application 功能

    [PHP中实现ASP中的Application 功能] /* 作者: 何志强[hzq@chinaasp.com hhzqq@21cn.com] 主页: http://www.phpchina.com/ ...

  5. ASP.NET之Application、Session和Cookie的差别

    在Asp.net中Application.Session和Cookie都能够保存信息,那么它们有什么不同呢? 一.首先Application是在server端建立一个状态变量,存储于server的全局 ...

  6. ASP.NET使用Application对象实现漂流瓶

    ASP.NET使用Application对象实现漂流瓶 最后实现效果 其实也很简单 //扔一个button中代码protected void Button1_Click(object sender, ...

  7. 比较.ASP.NET中Application,Session,Cookie,ViewState和Cache

    在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...

  8. Classic ASP 系列(3) Application 对象

    A group of ASP files that work together to perform some purpose is called an application. The Applic ...

  9. Asp.net中Application Session Cookie ViewState Cache

    Application 1.         Application用来保存所有用户共用的信息 2.         在Asp时代,如果要保存的数据在应用程序生存期内不会或者很少发生改变,那么使用Ap ...

最新文章

  1. Fragment的运用实列
  2. JAVA程序运行原理分析
  3. javadoc时候乱码-编码 GBK 的不可映射字符 - wqjsir的专栏 - 博客频道 - CSDN.NET
  4. python summary writer_tensorflow中summary操作
  5. LoadRunner常遇见的问题
  6. 项目管理excel_项目管理甘特图是什么?怎么做才能更高效?(EXCEL制作甘特图详细步骤)...
  7. 转行经验分享,关于软件测试的感悟,你想知道的都在这里……
  8. 使用docker优雅的部署你的nuxtjs项目
  9. C++继承:公有,私有,保护
  10. cvpr常用资源整理
  11. Java自定义拦截器详细教程
  12. 用户故事与敏捷方法—估算故事(实战三)
  13. 前端图片文件压缩方案
  14. google aviator:轻量级Java公式引擎
  15. 腾讯云TRTC —— 实时音视频完整案例 音视频+共享屏幕直播
  16. 互联网协议 — 802.1q VLAN 虚拟局域网协议
  17. JS--JS运行三部曲--渡一教育(视频笔记)
  18. java 调页储存_java调用存储过程
  19. 消逝的Coin:Stratum协议劫持技术
  20. asp毕业设计——基于asp+access的网上选题系统设计与实现(毕业论文+程序源码)——网上选题系统

热门文章

  1. Android进入本地文件管理器及不同文件查看
  2. AndroidVideoCache 原理
  3. CentOS 7 快速安装 Chrome 浏览器
  4. 如何将闲置的平板作为第二显示器(分屏)使用
  5. mapbox 地图使用
  6. ubuntu 安装 open-falcon falcon-plus
  7. 惠普HP Color LaserJet Enterprise M751dn 驱动
  8. “善”用区块链:善是初心,链是保障
  9. ROS入门之乌龟圆周运动
  10. 关于蓝牙的测试(一)