如何: 实现基于密钥的数据缓存在 ASP.NET 中,通过使用 Visual C#.net 为依赖项

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

本文内容

概要

本文演示了如何实现数据缓存在 Microsoft ASP.NET 应用程序中使用基于密钥的依存关系。本文中介绍的示例创建并将其插入到缓存的 DataSet 对象与通过引用它的键缓存项的另一项上设置的依赖项。例如的带有时间或基于文件的依赖项缓存的数据,请参阅本文"参考"一节。

要求

  • Microsoft Windows 2000 或 Windows XP
  • Microsoft Internet 信息服务器 (IIS)
  • microsoft.net 框架
  • Microsoft SQL Server

创建 ASP.NET Web 应用程序

使用 Microsoft Visual C#.net 创建 Microsoft ASP.NET Web 应用程序名为 DataCacher:
  1. 打开 Microsoft Visual Studio.net。
  2. 文件 菜单上指向 新建,然后单击 项目
  3. 新建项目 对话框中单击在 项目类型Visual C# 项目,然后单击 模板 下的 ASP.NET Web 应用程序
  4. 位置 框中键入项目名称作为 DataCacher 替换 URL 路径中的默认 WebApplication# 名称。如果使用的本地服务器可以作为 http://localhost,将位置设置为 http://localhost/DataCacher 将服务器名称。

生成 Web 窗体

: 在"运行代码"部分中,更多详细介绍了这一节中包含的代码。

生成数据缓存示例:
  1. 添加新的 Web 窗体名 DataCacheSample.aspx 为到您的项目在 Visual Studio.net 中,请执行以下操作:
    1. 右击项目节点在解决方案资源管理器。
    2. 单击 添加,然后单击 添加新 web 窗体
    3. Web 窗体 DataCacheSample.aspx 的名称。
    4. 单击 打开
  2. 在 Web 窗体中的 设计 视图选项卡上,Visual Studio.net IDE (集成的开发环境) 将是 Web 窗体按钮添加到页:
    1. 使用拖放操作移动到绘图页后,在 Web 窗体按钮。
    2. 单击以选中新建按钮。将 ID 属性改为 CreateNewOrCached,然后将 Text 属性更改为 创建新或缓存
  3. 添加第二个 Web 窗体按钮:
    1. 若要移动另一个 Web 窗体的拖放操作按钮拖到从工具箱中页上的使用。
    2. 单击以选中新建按钮。将 ID 属性更改为 删除,然后更改为 删除文本 属性。
  4. 添加 Web 窗体的标签,请执行以下操作:
    1. 使用拖放操作将从工具箱中移动到绘图页后,Web 窗体标签。
    2. 单击以选中在新标签。将 ID 属性改为 CacheStatus,然后清除 Text 属性。
  5. 使用拖放操作移动到绘图页后,Web 窗体 DataGrid 控件从工具箱中。为此控件中,将 ID 属性设置为 DataGrid1 的默认设置,在属性窗格中。

添加代码

添加代码以插入缓存项移除缓存项,并生成缓存依赖项:
  1. 用鼠标右键单击.aspx 网页,然后单击 查看代码 以打开代码隐藏页。
  2. 对于此的示例请确保 System.Data.SqlClientSystem.Data 中和 System.Web.Caching 命名空间添加到命名空间在代码隐藏页中列出。如果您使用 Visual Studio。若要创建 Web 窗体名称空间列出在代码中的隐藏页的 NET 看起来将类似于以下:
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;
    using System.Web.Caching;
    						
    : 如果未列出该命名空间,则或如果的冗余列表存在一个命名空间,您将收到警告。
  3. 设计 视图选项卡中,双击 $ CreateNewOrCached 按钮以打开代码隐藏页中的 CreateNewOrCached_Click 事件。
  4. 将下面的代码添加到 CreateNewOrCached_Click 事件:
    private void CreateNewOrCached_Click(object sender, System.EventArgs e) {
    	//Attempt to create a DataSet object from the cache entry with the key "CacheDataSetEmployees" 
    	object CacheDataSetEmployees = (DataSet)Cache.Get("CacheDataSetEmployees");
    	
            //Check to see if the object is null
    	if(CacheDataSetEmployees == null)
    	{
    	     //Set a value for the cache entry that will serve as the 
    	     //key for the dependency to be created on
    	     Cache["SqlPubsEmployees"] = "SomeValue";
    
    	     //Create the array of cache key item names
    	     string[] keys = new String[1];
    	     keys[0] = "SqlPubsEmployees";
    				
    	     DataSet ds = new DataSet();
    	     //Create the connection and pass in the ConnectionString
    	    SqlConnection MySqlConn = new SqlConnection("Server=kronicas17;Trusted_Connection=Yes;initial catalog=pubs");
    	     //Create the Data Adapter and pass in the command text and connection to use
    	     SqlDataAdapter MySda = new SqlDataAdapter("SELECT TOP 10 * FROM Employee", MySqlConn);
    	     //Populate the DataTable "Employees" in the DataSet
    	     MySda.Fill(ds,"Employee");
    	     //Set the DataGrid's DataSource to the "Employee" DataTable
    	     DataGrid1.DataSource = ds.Tables["Employee"];
    				
    	     //Create a dependency object referencing the array of cachekeys (keys)
    	     CacheDependency MyDependency = new CacheDependency(null, keys);
    	     //Insert the DataSet into Cache with a dependency on MyDependency
    	     Cache.Insert("CacheDataSetEmployees", ds, MyDependency);
    				MySqlConn.Close();
    				
    	     //Display the status of the DataSet/Cache Entry
    	     CacheStatus.Text = "New Version Created";
    	}
    	else
    	{
    	     //Display the status of the DataSet/Cache Entry
    	     CacheStatus.Text = "Cached Version Used";
    	     //Set the DataSource to the cached version of the DataSet
    	     DataGrid1.DataSource = CacheDataSetEmployees;
            }
            //Bind the DataGrid to the DataSource
    	DataGrid1.DataBind();
    }
    						
    : 您可能需要修改 ConnectionString 代码中此步骤,以与您的 SQL 服务器正常工作。对于正常工作的该代码,您需要安装将 SQL Server Pubs 数据库。
  5. 在 DataCacheSample.aspx 页的 设计 视图选项卡,双击以打开代码隐藏页中的 Remove_Click 事件在 删除 按钮。
  6. 将下面的代码添加到 Remove_Click 事件:
    private void Remove_Click(object sender, System.EventArgs e)
         {
    	//Remove the cache item listed in the cachekeys array (keys)
    	Cache.Remove("SqlPubsEmployees"); 	//Display the status of the cache item
    	CacheStatus.Text = "Cache Item Removed";
         }
    					
  7. <system.web> 之间 </system.web> 在 Web.config 文件中添加以下元素:
    <identity impersonate=”true” />
    
  8. 文件 菜单上单击 全部保存 来保存 Web 窗体和其他相关联的项目文件。
  9. 在 Visual Studio.net IDE 中将 生成 菜单上单击以生成项目的 生成器

运行代码

  1. 若要运行本代码,用鼠标右键单击在解决方案资源管理器中,DataCacheSample.aspx 网页,然后单击 在浏览器中的查看
  2. 单击 CreateNewOrCached 按钮 ; CacheStatus 标签应显示"创建新版本",然后填充 DataGrid 控件。

    说明
    • CacheStatus 标签的 创建的新版本 设置为的缓存键 CacheDataSetEmployees 不还引用一个有效的缓存项输入该事件时的结果。在这种情况下创建 数据集DataGrid 控件绑定到,数据集数据集 输入缓存使用的缓存密钥 "CacheDataSetEmployees"
    • 从上一步您应该具有还注意到名为 MyDependencyCacheDependency 对象的创建。通过使用 Insert 方法添加到缓存中时,MyDependency 对象被列为 CacheDataSetEmployees 项目依赖项。值得注意尽管此示例演示基于密钥的依存关系,您可以使用其他类型的依赖项基于缓存条件,(如文件或一个时间戳。
  3. 请再次单击 CreateNewOrCached 按钮。CacheStatus 标签显示"缓存版本",表明已使用的缓存数据集。您可以验证这是通过使用 SQL 查询分析器或另一种工具来修改 Pubs 数据库中显示的记录的一个缓存的数据。修改记录后,请再次单击 CreateNewOrCached 按钮。请注意所做的更改将不显示。 单击 删除,然后单击 $ CreateNewOrCached 再次以查看您对数据库所做的更改。
  4. 单击 删除 按钮。CacheStatus 标签显示缓存项删除"。与 "SqlPubsEmployees" 会删除通过 Cache.Remove 方法 Remove_Click 事件中的键缓存项。因为您在创建它时,您可以列出数组 (它包含已删除的项的缓存密钥名称) 与 MyDependency"CacheDataSetEmployees" 项将移除,因为通过使用 Insert 方法,以及通过引用作为其依赖项参数 MyDependency 创建它。
  5. 请再次单击 CreateNewOrCached 按钮。CacheStatus 标签显示"创建新版本"的消息,因为数据集创建 based 上,它不再存在于缓存时触发该事件。
  6. 您可能还注意到 DataGrid 控件显示为 数据集 项从缓存中删除后,用数据填充。这是默认情况下设置为 TrueEnableViewState 属性的结果。这使得维护,控件的状态,这与在代码中高速缓存项操作。对于每个阶段的控件的状态更加直观表示,您可以将 EnableViewState 设置为 False
: 本示例方面,缓存键数组 (在示例代码中的 数组) 可能在实际情况下保存为其他表的缓存键或其他缓存项,以便如果一个这些项在更改,高速缓存项 (在此示例中 CacheDataSetEmployees) 的项的创建时使用此依赖项将被从缓存中移除也。您可以再行为根据需要通过使用回调 ; 有关回调的详细信息,请参阅本文"参考"一节。

故障排除

  • 高速缓存项数组中列出的密钥名称必须与实际的缓存项相关联。如果它们不依赖项用于该项目是不正确地保留在缓存中。如果 数组的代码示例在保存另一个数组元素,元素被设置为一个无效的高速缓存项名称是一个这样的示例。
  • 缓存键数组没有任何特定的意义,直到它与 CacheDependency 对象一起使用。
  • 如果没有依赖项或其他到期高速缓存中插入项,运行库将控制从缓存删除项目时。

参考

委派的有关使用 CacheItemRemovedCallback 的详细信息,请参阅下面的 Microsoft 网站:
CacheItemRemovedCallback 代理
http://msdn2.microsoft.com/en-us/library/system.web.caching.cacheitemremovedcallback(vs.71).aspx
: 该 CacheItemRemovedCallback 委托定义为从缓存中移除缓存的项时通知应用程序的回调方法。

CacheDependency 类有关的详细信息,请参阅下面的 Microsoft 网站:
CacheDependency 类
http://msdn2.microsoft.com/en-us/library/system.web.caching.cachedependency(vs.71).aspx
: 该 CacheDependency 类跟踪可以为文件、 目录,或应用程序的缓存中的其他对象的键缓存依赖项。

有关各种可供 ASP.NET 的缓存选项的详细信息,请参阅下面的 Microsoft.net 框架 SDK 文档:
向缓存添加项
http://msdn.microsoft.com/en-us/library/cc511535.aspx
有关各种可供 ASP.NET 的缓存选项的其他信息,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
305140ASP.NET 路线图
307225信息: ASP.NET 缓存概述

属性

文章编号: 308147 - 最后修改: 2007年8月28日 - 修订: 2.8
这篇文章中的信息适用于:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2003 标准版
  • Microsoft Visual C# .NET 2002 标准版
关键字:?
kbmt kbcaching kbdatabase kbhowtomaster KB308147 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 308147
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