• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[转]Asp.net缓存(三)--检查缓存页的有效性

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

当输出缓存中有一个它希望用作客户端请求响应的现有项时,它必须首先检查原服务器(或含有新响应的中间缓存,如代理服务器)以确定该缓存项是否仍可用。此过程称为验证缓存项。为避免因在缓存项有效的情况下重新生成和重新传输页,或在缓存项无效的情况下发生额外的往返进程而导致资源浪费,ASP.NET 为您提供了一种以编程方式验证缓存页的机制。

注意   有关缓存有效性及其要求的更多信息,请参见位于 www.w3.orgor 的 HTTP 1.1 规范。

若要确定缓存页是否有效,必须使用与 HttpCacheValidateHandler 委托相同的签名定义一个事件处理程序。该处理程序应执行检查以确定存储在缓存中的页是否仍有效,然后将 HttpValidationStatus 枚举值之一分配给检查的可能返回结果。该枚举具有以下三个值:

  • Invalid,该值表示缓存页无效,并且将从缓存中移除该页,而该请求将被作为缓存未命中处理。
  • IgnoreThisRequest,该值导致请求被作为缓存未命中处理,并且将执行该页,但该缓存页是无效的。
  • Valid,该值表示缓存页仍有效。

在一个页生存期事件中,HttpCachePolicy.AddValidationCallback 方法将事件处理程序作为参数获取。从 Web 服务器缓存中输出响应服务之前,将查询已注册的所有处理程序以确保资源的有效性。如果任何处理程序设置了表示资源无效的标志,则该项将标记为无效并将从缓存中移除。然后,将请求作为缓存未命中来处理。

检查缓存页的有效性

  1. 定义类型 HttpCacheValidateHandler 的事件处理程序,该事件处理程序用于检查缓存页响应的有效性。

    以下示例创建一个事件处理程序 Validate,用于检查 myText TextBox Web 服务器控件的 Text 属性值。根据文本框中输入的值,Validate 返回相应的 HttpValidationStatus 枚举值。

    [C#]
       
     1 public void Validate(HttpContext context, Object data, ref HttpValidationStatus status)
     2    }

    [Visual Basic]
     1Validate
    从一个页生存期事件中,调用 HttpCachePolicy.AddValidationCallback 方法,该操作将传递您在第 1 步的第一个参数变量中所定义的事件处理程序。
  2. 在以下代码示例中,Page_Load 方法调用具有 Validate 事件处理程序(已在第 1 步的第一个参数变量中传递)的 AddValidationCallback

    [C#]
        
    [Visual Basic]
    1Page_Load
    以下示例将第 1 步中所定义的事件处理程序用于第 2 步中的代码并将时间戳写入页中。
注意   该示例旨在简单地展示如何使缓存中的页无效。您创建的大多数方案都应该根据服务器上的某个状态(与更改的页关联)对页进行验证。
[C#]
<%@ OutputCache Duration=100 varybyparam="none" %>
<Script Language="C#" runat="server">
public void Page_Load(){
if(!IsPostback) {
myText.Text = "Enter validation request." ;
}
Response.Cache.AddValidationCallback(new HttpCacheValidateHandler(Validate), null);
stamp.InnerHtml = DateTime.Now.ToString("r");
}
public void Button1_Click(){
Validate();
}
public void Validate(HttpContext context, Object data, ref HttpValidationStatus status) {
if (myText.Text == "false") {
status = HttpValidationStatus.Invalid;
} else if (myText.Text == "ignore") {
status = HttpValidationStatus.IgnoreThisRequest;
} else {
status = HttpValidationStatus.Valid;
}
}
</Script>
<form runat="server" >
<asp:textbox  />
<br>
<asp:button  />
</form>
<br>
<b>In the text box, enter false to invalidate the cached page, ignore to ignore the current request, or any other string to leave the output cached page valid. </b>
<br>
<br>
<Font size=6><B id=stamp runat=server /></Font>


[Visual Basic] <%@ OutputCache Duration=100 varybyparam="none" %> <Script Language="VB" runat="server"> Public Sub Page_Load() If Not IsPostback Then myText.Text = "Enter validation request." End If Response.Cache.AddValidationCallback(New HttpCacheValidateHandler(Validate), Nothing) stamp.InnerHtml = DateTime.Now.ToString("r") End Sub 'Page_Load Public Sub Button1_Click() Validate() End Sub 'Button1_Click Public Sub Validate(context As HttpContext, data As [Object], ByRef status As HttpValidationStatus) If myText.Text = "false" Then status = HttpValidationStatus.Invalid Else If myText.Text = "ignore" Then status = HttpValidationStatus.IgnoreThisRequest Else status = HttpValidationStatus.Valid End If End If End Sub 'Validate </Script> <form runat="server" > <asp:textbox /> <br> <asp:button /> </form> <br> <b>In the text box, enter false to invalidate the cached page, ignore to ignore the current request, or any other string to leave the output cached page valid. </b> <br> <br> <Font size=6><B id=stamp runat=server /></Font>
[本日志由 admin 于 2006-12-05 11:10 PM 编辑]
文章来自:
本站原创
引用通告地址: www.opent.cn/trackback.asp?tbID=140
Tags:

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Asp.net缓存简介发布时间:2022-07-10
下一篇:
登陆整合实现-QQ互联认证(ASP.NET版本)发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap