对于每个应用程序域均创建该类的一个实例,并且只要对应的应用程序域保持活动,该实例便保持有效。有关此类实例的信息通过HttpContext对象的Cache属性或Page对象的Cache属性来提供。
1.Cache对象的属性
Cache对象的属性如表14-13所示:
表14-13 Cache对象的属性
属 性 |
说 明 |
属 性 值 |
Count |
获取存储在缓存中的项数。当监视应用程序性能或使用ASP.NET跟踪功能时,此属性可能非常有用 |
存储在缓存中的项数 |
Item |
获取或设置指定键处的缓存项 |
表示缓存项的键的String对象 |
2.Cache对象的方法
Cache对象的方法如表14-14所示:
表14-14 Cache对象的属性
方 法 |
说 明 |
Add |
将指定项添加到 Cache 对象,该对象具有依赖项、过期和优先级策略,以及一个委托(可用于在从 Cache 移除插入项时通知应用程序) |
Get |
从 Cache 对象检索指定项 |
Remove |
从应用程序的 Cache 对象移除指定项 |
Insert |
向Cache对象插入项。使用此方法的某一版本改写具有相同key参数的现有Cache项 |
实例14-19:检索为ASP.NET文本框服务器控件缓存的值
Get方法可以从Cache对象检索指定项,其唯一的参数key表示要检索的缓存项的标识符。该方法返回检索到的缓存项,未找到该键时为空引用。
下面的示例展示如何检索为ASP.NET文本框服务器控件缓存的值。
Cache.Get("MyTextBox.Value");
实例14-20:移除Cache对象
Remove方法可以从应用程序的Cache对象移除指定项,其唯一的参数key表示要移除的缓存项的String标识符。该方法返回从Cache移除的项。如果未找到键参数中的值,则返回空引用。
下面的示例创建一个RemoveItemFromCache函数。调用此函数时,它使用Item属性检查缓存中是否包含与Key1键值相关的对象。如果包含,则调用Remove方法来移除该对象。
public void RemoveItemFromCache(Object sender, EventArgs e)
{
if(Cache["Key1"] != null)
Cache.Remove("Key1");
}
Global.asax
除了编写界面代码外,开发人员还可以将逻辑和事件处理代码添加到他们的Web应用程序中。此代码不处理界面的生成,并且一般不为响应个别页请求而被调用。相反,它负责处理更高级别的应用程序事件,如Application_Start,Application_End,Session_Start,Session_End等。开发人员使用位于特定Web应用程序虚拟目录树根处的Global.asax文件来创作此逻辑。第一次激活或请求应用程序命名空间内的任何资源或URL时,ASP.NET自动分析该文件并将其编译成动态.NET框架类(此类扩展了HttpApplication基类)。
第一次激活或请求应用程序命名空间内的任何资源URL时,ASP.NET分析Global.asax文件并将其动态编译成.NET框架类。Global.asax文件被配置为自动拒绝任何直接URL请求,从而使外部用户不能下载或查看内部代码。
通过在Global.asax文件中创作符合命名模式“Application_EventName(Appropriate EventArgumentSignature)”的方法,开发人员可以为HttpApplication基类的事件定义处理程序。例如:
<script language="C#" runat="server">
void Application_Start(object sender, EventArgs e) {
// Application startup code goes here
}
</script>
如果事件处理代码需要导入附加的命名空间,可以在.aspx页中使用@ import指令,如下所示:
<%@ Import Namespace="System.Text" %>
第一次打开页时,引发应用程序和会话的Start事件:
void Application_Start(object sender, EventArgs e) {
// Application startup code goes here
}
void Session_Start(object sender, EventArgs e) {
Response.Write("Session is Starting...<br>");
Session.Timeout = 1;
}
对每个请求都引起BeginRequest和EndRequest事件。刷新页时,只显示来自Begin-Request,EndRequest和Page_Load方法的消息。
静态对象、.NET框架类和COM组件都可以使用对象标记在Global.asax文件中定义。范围可以是appinstance,session或application。appinstance范围表示对象特定于Http-Application的一个实例并且不共享。
<object id="id" runat="server" class=".NET Framework class Name" scope=" appinstance"/>
<object id="id" runat="server" progid="COM ProgID" scope="session"/>
<object id="id" runat="server" classid="COM ClassID" scope="application"/>
请注意,Global.asax使用了微软的HTML拓展<SCRIPT>标记语法来限制脚本,这也就是说,必须用<SCRIPT>标记来引用这两个事件而不能用<%和%>符号引用。在Global.asax中不能有任何输出语句,无论HTM的语法还是Response.Write方法都是不行的,Global.asax是任何情况下也不能进行显示的。