知识大全 ASP.NET保持用户状态的九种选择(下)

Posted

篇首语:自己选择的路,跪着也要走完。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET保持用户状态的九种选择(下)相关的知识,希望对你有一定的参考价值。

ASP.NET保持用户状态的九种选择(下)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  ASP NET中的新状态容器

  前面我们提到 ASP NET为保存用户请求间的数据添加了几种新的途径 这些途径给了你如何保持状态信息更好的控制 这些技术的范围可以窄到只有一个请求那么小(Context对象) 也可以宽到整个Web服务器和服务器上的所有应用程序(Machine config文件) 在多数情况下你有多种保存特定数据片的选择 使用每个方法描述的问题和答案来决定某个对象是否适合你的需要

  Cache

  Cache对象用于单个用户 一组用户或所有的用户 这种数据为多个请求保持 它可以保持很长时间 但是不能超过应用程序重新启动的时间 并且数据的终止基于时间或者其它的依赖关系 它可以高效率地保持大量或少量地数据

  Cache 是ASP NET中最 酷 的对象之一 它提供了难以置信的灵活性 通用性和性能 因此在ASP NET应用程序中它通常是比Application或Sessions更好的保持数据的对象 本文没有详细介绍Cache对象的使用方法 但是仍然可以说它是一个万能对象 与其它的集合对象相似 它是一个简单的名称-值集合 但是通过使用指定特定用户的键值可以缓存特定用户的值 同样你可以缓存不同的相关数据的多个数据集 例如几个有键(如fordcars chevycars gmcars)的汽车集合 Cache中的数据可以给定一个绝对的 可变的或基于文件的终止时间 它们也实现了一个回调功能 在被缓存的值从缓存中提取时被调用 这个功能很有用 因为接着你能检查它是否为最新的数据变量 如果不是(或数据源不可用) 就重新缓存被终止的值

  添加和访问缓存中值的语法与先前谈到的相似 但是Cache给访问集合内容的标准索引器方法作了补充 它支持多种方法 允许对被缓存数据的更多的控制 最频繁使用的方法是Insert 它支持几种重载 允许你指定依赖 超时值 优先级和回调 下面是一些简单的例子

// 给缓存添加项Cache[ myKey ] = myValue;

// 从缓存中读取项Response Write(Cache[ myKey ]);

// 把CacheDuration增加 秒并把项添加到缓存中Cache Insert( myKey myValue null System DateTime Now AddSeconds( ) System Web Caching Cache NoSlidingExpiration);   Cache对象的最强大的特性之一是当缓存中的某个项终止时执行回调的能力 它使用了委托或函数指针 这在本文中没有讨论 幸运的是一旦你有了某些这些技术怎样工作的示例 就能通过简单的剪切和粘贴在应用程序中使用它们 不需要知道委托是怎样工作的复杂过程 有很多使用这种功能的原因 最通常的是在数据终止时用当前数据重新填充缓存 或者如果重新填充缓存的数据源不可用时恢复旧的缓存数据

  在我的例子中 简单地缓存了当前时间 当缓存超期的时候 我将给缓存中的字符串末尾添加一个星号(*) 在超过时间后 你能通过计算星号的数量来确定缓存超期了多少次 图 演示了回调的重要概念 并且提供了给使用缓存建立更多功能回调程序的好模板

private void Page_Load(object sender System EventArgs e) string cacheKey = myKey ; string data = ; // 检查数据是否已经被缓存了 if(Cache[cacheKey]==null)   // 因为数据在缓存中 所有读取数据  data = System DateTime Now ToString();

  //建立回调委托的一个实例  CacheItemRemovedCallback callBack =new CacheItemRemovedCallback(onRemove);

  Label Text = Generated: + data;

  Cache Insert(cacheKey data null       System DateTime Now AddSeconds( )       System Web Caching Cache NoSlidingExpiration       System Web Caching CacheItemPriority Default       callBack);  else   Label Text = Cached: + Cache[cacheKey] ToString(); 

private void onRemove(string key object val CacheItemRemovedReason reason) //建立回调委托的一个实例 CacheItemRemovedCallback callBack =new CacheItemRemovedCallback(onRemove);    Cache Insert(key val ToString() +      * null System DateTime Now AddSeconds( ) Cache NoSlidingExpiration     System Web Caching CacheItemPriority Default callBack);    代码段 缓存回调示例

  注意代码段中一个重要的特性是在Page_Load中使用模式(pattern)来确定是否使用缓存中的数据 当你处理缓存中的项时也可能使用这种模式 使用if语句来检查缓存的当前内容是否为空(因为要多次引用 为缓存键使用了一个变量) 如果是空的 从数据源生成数据并放入缓存中 如果不是空的 从缓存中返回数据 如果数据访问逻辑很复杂 你需要把整个if语句放入一个独立的函数 该函数的任务是检索数据 Cache对象的功能比先前我们讨论的大多数对象多得多 这也是ASP NET更强大的功能之一 并且我明确地推荐阅读关于它的更多内容

  Context

  Context对象保持单个用户 单个请求的数据 并且数据只在该请求期间保持 Context容器可以保持大量的数据 但是典型的情况下是保存小的数据片 因为它经常通过global asax中的某个处理方法为每个请求实现

  Context容器(从Page对象访问或使用System Web HttpContext Current)被提供用于保持需要在不同的HttpModules和HttpHandlers之间传递的值 它也可以用于保持某个完整请求的相应信息 例如 IbuySpy入口在global asax中的Application_BeginRequest事件过程中给容器填满了许多配置信息 注意这只在当前请求中可用 如果你希望在下一个请求中也能使用 请考虑使用ViewState

  从Context集合中设置和获取数据使用的语法与前面讨论的其它集合对象(如Application Sessions和 Cache)的相似 下面是两个简单的例子

// 给Context添加项Context Items[ myKey ] = myValue;

// 从Context中读取项Response Write(Context[ myKey ]);

  ViewState

  ViewState为单个用户保持状态信息 保持期为ASPX页面工作时间 ViewState容器可以保持大量的数据 但是必须小心管理ViewState的大小 因为它增加了每个请求和回应的下载(download)大小

  ViewState是ASP NET中的一个新容器 也许你已经使用它了 但是你可能还是不了解它 这是因为所有的内建Web控件都使用ViewState在页面回发(postback)间保持自己的值 但是你必须小心 因为它影响应用程序的性能 影响的大小依赖于回发之间使用ViewState的多少 对大多数Web窗体来说数量非常小

  确定某个页面上每个控件使用的ViewState的数量最简单的方法是打开页面追踪并检查每个控件负载了多少个ViewState 如果某个特定控件不需要在回发之间保持数据 请通过把EnableViewState设置为false关闭该对象的ViewState 你也可以通过在浏览器中查看的HTML源并检查隐藏窗体字段__VIEWSTATE来确定某个给定的ASP NET页面ViewState的总共大小 注意这些内容都是使用Base 编码的 用于放置偶然的查看和维护 ViewState也可以通过给@Page指令添加EnableViewState= false 在整个页面中禁止

  典型的Web窗体不需要直接维护ViewState 但是如果你建立自定义Web控件 就需要了解它是怎样工作的 并为你的控件实现它 这样该控件的工作方式才能与随ASP NET发布的Web控件同样地工作 向ViewState读取或写入值都可以通过上面讨论地其它集合对象的语法完成

// 给ViewState添加项ViewState[ myKey ] = myValue;

//从Context读取项Response Write(ViewState[ myKey ]);    当建立自定义Web控件时 你也许希望它们有ViewState的好处 这在控件的属性层可以简单实现 代码段 演示了怎样保存一个简单的自定义控件的PersonName属性到ViewState中 并在该控件的Render方法中使用它

namespace MSDN StateManagement public class HelloPerson : System Web UI Control   public string PersonName     get       string s = (string)ViewState[ PersonName ];    return ((s == null) ? : s);      set       ViewState[ PersonName ] = value;       protected override void Render(System Web UI HtmlTextWriter writer)     writer Write( Hello + PersonName);   

  代码段 在ViewState中保存数据

  Web config和Machine config文件

  这些文件中的数据对于某个应用程序的所有用户来说都可以使用 Web config文件中存储的数据可用于应用程序的整个生命周期 这些数据一般很小 该对象一般用于保持文件位置和数据库连接的字符串 大的数据片最好保存在其它位置

  作为其它多样集合对象的补充 ASP NET引入了一组XML配置文件用于管理应用程序甚至于整个服务器的很多设置 每个ASP NET应用程序使用Web config文件来设置它的许多属性 每个服务器在系统文件夹下有一个作为应用程序基础的Machine config文件 这些设置都作为默认值使用 除非重载 作为保存配置数据的补充 这些文件可以保存应用程序(或多个应用程序)需要的数据

  无论什么时候应用程序启动都会读取配置信息 接着这些信息被缓冲 由于被缓冲了 应用程序可以快速读取它们 因此不需要考虑应用程序的瓶颈 因为它经常执行某个文本文件的一些整型信息 此外 某个应用程序的Web config的改变将导致应用程序重新启动 这确保了对配置文件信息的修改立即反映到应用程序中

  数据库连接信息 默认图像路径和XML数据文件路径是通常保存在Web config文件中的数据片 在Web config文件中保存数据的语法如下 在理想的情况下你也许希望使用集成的SQL身分验证

<configuration><! 应用程序特殊设置 ><appSettings><add key= connectionString value= server=myDBServer;uid=myUID;pwd=myPassword;database=myDB /></appSettings><system web><! 所有的wsb设置 ></system web></configuration> 

  为了访问ASP NET页面中的值 可以使用ConfigurationSettings集合 它在System Configuration名字空间中 下面的简单例子演示了怎样提取前面的连接字符串到一个本地变量中

using System Configuration;oooString strConnString = ConfigurationSettings AppSettings[ connectionString ];

  给System Configuration名字空间添加一个引用减少了引用这些值的代码数量 因为对Web config或 Machine config的修改将导致应用程序立即重新启动 典型情况下这些值只由服务器系统管理员手动修改 因此你可以认为这些文件是保存只读数据而不是应用程序中修改的数据的好位置

  结论

cha138/Article/program/net/201311/15003

相关参考

知识大全 Web Service中保持ASP.net的状态

WebService中保持ASP.net的状态  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  简

鱼类锚头鳋病的九种治疗方法

锚头鳋属于寄生桡足类,对鱼类危害很大。常见的锚头鳋有多态锚头鳋、鲤鱼锚头鳋、草鱼锚头鳋和四球锚头鳋四种。锚头鳋在当年幼鱼或成鱼体上都能寄生,它是以头部钻入寄主的肌肉或鳞片下,胸腹则裸露于寄主体外。在锚

鱼类锚头鳋病的九种治疗方法

锚头鳋属于寄生桡足类,对鱼类危害很大。常见的锚头鳋有多态锚头鳋、鲤鱼锚头鳋、草鱼锚头鳋和四球锚头鳋四种。锚头鳋在当年幼鱼或成鱼体上都能寄生,它是以头部钻入寄主的肌肉或鳞片下,胸腹则裸露于寄主体外。在锚

知识大全 JSP的九种基本内置组件简介

JSP的九种基本内置组件简介  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!cha138/

农机维修中常见的九种不安全操作

在农业机械维修中存在着个别维修人员采用不安全的方法,违规操作,最常见的有九种:1、用不结实的绳索吊挂重物。在维修拖拉机时,常见人用麻绳、尼龙绳、三角带等吊卸发动机、变速箱,这是很不安全的。正确的做法是

农机维修中常见的九种不安全操作

在农业机械维修中存在着个别维修人员采用不安全的方法,违规操作,最常见的有九种:1、用不结实的绳索吊挂重物。在维修拖拉机时,常见人用麻绳、尼龙绳、三角带等吊卸发动机、变速箱,这是很不安全的。正确的做法是

投资保险的九种不赔事由

1.未按期缴纳保险费。在人身保险合同中,投保人缴纳第一期保险费之后保险合同开始生效,此后投保人必须按期缴纳保险费,超过宽限期之后,投保人仍未缴纳保险费又无保费自动垫交功能的,保险合同效力中止,在效力中

提高雌龟产卵量的九种方法

1.环境安静亲龟饲养池,尽量安排在安静、向阳、避风处,特别要选在附近无突发巨响的环境,龟的交配季节,要防止人畜到池边惊扰。交配繁殖季节,每天下午尽量早投料,以赶在傍晚龟交尾,产卵行动之前为宜。2.调节

提高雌龟产卵量的九种方法

1.环境安静亲龟饲养池,尽量安排在安静、向阳、避风处,特别要选在附近无突发巨响的环境,龟的交配季节,要防止人畜到池边惊扰。交配繁殖季节,每天下午尽量早投料,以赶在傍晚龟交尾,产卵行动之前为宜。2.调节

提高鱼体抗病能力的九种措施

在鱼类养殖过程中,各种鱼病一直是制约养殖效益的重要因素,要消灭一切病原体是不现实的,但可以减少病害的发生。要控制病害的发生,笔者认为可以从以下几方面来提高鱼体的抗病能力:  一、合理混养不同种鱼类身上