您好,欢迎访问三七文档
1Web应用•1ASP.NET应用程序的基本要素•2ASP.NET状态管理•3ASP.NET性能优化ASP.NET页生命周期概述•当请求ASP.NET页时,便触发一系列Page事件。这些事件总是按照一定的顺序发生,这就是Page事件生命周期。这些事件包括初始化、实例化控件、还原和维护状态、运行事件处理程序代码以及进行呈现。•一般来说,从客户端浏览器开始请求一个ASP.NET网页,至服务器经过处理并输出内容到浏览器的过程需要经历几个阶段,在不同的阶段均要完成特定的处理。ASP.NET页生命周期的各阶段如下。ASP.NET页生命周期概述(1)页请求:发生在页生命周期开始之前,用户请求页时,ASP.NET将确定是否需要分析和编译页,或者是否可以在不运行页的情况下发送页的缓存版本以进行响应。(2)开始:在开始阶段,将设置页属性,如Request和Response。在此阶段,页还将确定请求是回发请求还是新请求,并设置IsPostBack属性。此外,在开始阶段,还将设置页的UICulture属性。(3)页初始化:在这个期间,可以使用页中的控件,并设置每个控件的UniqueID属性。此外,任何主题都将应用于页。如果请求是回发请求,则回发数据并不加载,并且控件属性值也不还原为视图状态中的值。(4)加载:加载期间,如果当前请求是回发请求,这将使用从视图状态和控件状态恢复的信息加载控件属性。ASP.NET页生命周期概述(5)验证:在验证期间,将调用所有验证程序控件的Validate方法,此方法将设置各个验证程序控件和页的IsValid属性。(6)回发事件处理:如果请求是回发请求,则调用所有事件处理程序。(7)呈现:在呈现期间,视图状态将被保存到页,然后页将调用每个控件,以将其呈现的输出提供给页的Response属性的OutputStream。(8)卸载:完全呈现页、将页发送至客户端并准备丢弃时,将调用卸载。此时,卸载页属性并执行清理。ASP.NET页生命周期概述•在上述每个阶段中,页将引发可运行用户自己的代码进行处理的事件。对于控件事件,通过以声明方式使用属性或以使用代码的方式,均可将事件处理程序绑定到事件。同时,页还支持自动事件连接,即ASP.NET将寻找具有特定名称的方法,并在引发特定事件时自动运行这些方法。ASP.NET将Page指令的AutoEventWireup属性设置为True时,页事件会自动绑定至使用Page_event命名约定的方法。ASP.NET状态管理•2.1服务器端方法•2.2客户端方法•1、应用程序级别的状态存取(就是说服务器上的应用程序,各个客户端都可以访问它)2、变量状态的存储和提取存储:Application[username]=xieex;提取:stringstrUserName=Application[username];3、同时访问要加锁,防止并发冲突Application.Lock();Application.Unlock();Application是保存在服务器内存中的。Application对象•ASP.NET应用程序是单个Web服务器上的某个虚拟目录及其子目录范围内的所有文件、页、处理程序、模块和代码的总和。ASP.NET允许用户使用应用程序状态来保存每个活动的Web应用程序的值,这些值保存在SystemWeb.HttpApplicationState类的实例中。HttpApplicationState类的实例在客户端第一次从某个特定的ASP.NET应用程序虚拟目录中请求任何URL资源时创建。对于Web服务器上的每个ASP.NET应用程序都要创建一个单独的实例,然后通过内部Application对象公开对每个实例的引用。•应用程序状态是一种全局存储机制,可从Web应用程序中的所有页面访问。因此,应用程序状态可用于存储需要在服务器往返行程之间及页请求之间维护的信息。Application对象•应用程序状态的实现可以提高Web应用程序的性能。例如,如果将常用的、相关的静态数据集放置到应用程序状态中,则可以通过减少对数据库的数据请求总数来提高网站性能。但是,这里存在一种性能平衡,当服务器负载增加时,包含大块信息的应用程序状态变量就会降低Web服务器的性能。•应用程序状态存储在一个键/值字典中,可以将特定于应用程序的信息添加到此结构以在页请求期间读取它。通常在Glabal.asax文件中的应用程序启动事件中初始化某个应用程序状态值。也可以通过调用HttpApplicationState类的Add方法将某个对象值添加到应用程序状态集合中,例如:•Application.Add(counter,1);Application对象•由于Web应用是多线程的,因此应用程序状态变量可以同时被多个线程访问。为了防止产生无效数据,在设置值前,必须锁定应用程序状态,只供一个线程写入。具体方法就是通过调用HttpApplicationState类的Lock和UnLock方法进行锁定和取消锁定。例如:Application.Lock();Application[counter]=((int)Application[counter])+1;Application.UnLock();•在调用了Lock方法之后,Application对象被锁住,在调用UnLock方法之前,其他的用户都无法访问Application对象,这样就避免了Application对象在修改的过程中被脏读。•通过调用HttpApplicationState类的Get方法读取变量的值。例如:•intCounter=(int)Application.Get(counter);•直接读取counter变量的值,不过,在编写实际应用时,还是要先判断该应用程序状态集合中是否存在该变量,然后再读取。Application对象•可以调用HttpApplicationState类的Set方法,传递变量名和变量值来更新已添加的变量的值。如果传递的变量在应用程序状态集合中不存在,则添加该变量。例如:Application.Set(counter,5);•通过调用HttpApplicationState类的Clear或RemoveAll方法,移除应用程序状态集合中的所有变量;也可以调用Remove或RemoveAt方法来清除某一个变量。例如:Application.Remove(counter);Application.RemoveAt(0);Application对象使用Application的优缺点如下1)使用应用程序状态的优点(1)易于实现。应用程序状态易于使用,为ASP开发人员所熟悉,并且与其他.NETFramework类一致。(2)全局范围。由于应用程序状态可供应用程序中的所有页来访问,因此在应用程序状态中存储信息可能意味着仅保留信息的一个副本(例如,相对于在会话状态或在单独页中保存信息的多个副本)。2)使用应用程序状态的缺点(1)全局范围。应用程序状态的全局性可能也是一项缺点。在应用程序状态中存储的变量仅对于该应用程序正在其中运行的特定进程而言是全局的,并且每一应用程序进程可能具有不同的值。因此,不能依赖应用程序状态来存储唯一值或更新网络源和网络场配置中的全局计数器。Application对象(2)持久性。因为在应用程序状态中存储的全局数据是易失的,所以如果包含这些数据的Web服务器进程被损坏(最有可能是因服务器崩溃、升级或关闭而损坏),将丢失这些数据。(3)资源要求。应用程序状态需要服务器内存,这会影响服务器的性能以及应用程序的可缩放性。•Application用于保存所有用户的公共的数据信息,如果使用Application对象,一个需要考虑的问题是任何写操作都要在Application_OnStart事件(global.asax)中完成.尽管使用Application.Lock和Applicaiton.Unlock方法来避免写操作的同步,但是它串行化了对Application对象的请求,当网站访问量大的时候会产生严重的性能瓶颈.因此最好不要用此对象保存大的数据集合Session•对网站的一次访问叫做会话(Session),超时后,自动结束会话(一般是20分钟Session对象•Session(会话)对象用于存储特定的用户会话所需的信息,从一个用户开始访问某个特定的主页开始,到用户离开为止。服务器可以分配给这个用户一个Session,以存储特定的用户信息。用户在应用程序的页之间跳转时,存储在Session对象中的变量不会被清除;而用户在应用程序中访问页面时,这些变量会始终存在。Session实际上就是服务器与客户机之间的“会话”。•HTTP是一个无状态的协议,这意味着它不会自动提示一个请求序列是否都来自相同的客户端,甚至不提示单个浏览器实例是否仍在活跃地查看某个页或网站。因此,如果没有其他基础架构的帮助,要想生成需要维护某些跨请求状态信息的Web应用程序(如购物车等),就会非常困难。Session对象•与Application对象一样,Session对象也可以存取变量。但是,Session对象存储的变量只针对某个特定的用户,而Application对象存储的变量则可以被该应用程序的所有用户共享。•当不同的用户登录同一个页面时,服务器会为每一个用户分配一个Session。这些Session应该是各不相同的,不然就无法正确识别用户。也就是说,当一个Session创建以后,它应该具有唯一性标志,每一个Session都具有独一无二的SessionID。•如果网站服务器想知道用户是否已经离开,Session是否已经结束,就需要对Session设置一个超时期限。如果用户在这个期限内没有对网站内的任意一个页面提出请求或者刷新页面,那么服务器就可以认为用户已经离开了网站,而结束为该用户创建的Session。系统默认的Session超时期限为20分钟,可以由“Internet服务管理器”来更改这个默认值。Session对象Session对象拥有OnStart和OnEnd事件,它们都存在于文件Global.asax中。当一个Session对象被创建时,将触发Session_OnStart事件;当一个Session对象被终止时,将触发Session_OnEnd事件。ASP.NET会话状态支持若干用于会话数据的存储选项。通过在应用程序的Web.config文件中为sessionState元素的mode属性分配一个SessionStateMode枚举值,可以指定ASP.NET会话状态使用的模式。SessionStateMode枚举值有如下几个选项:(1)InProc模式:将会话状态存储在Web服务器的内存中,这是默认设置。(2)StateServer模式:将会话状态存储在一个名为ASP.NET状态服务的单独进程中,这确保了在重新启动Web应用程序时会保留会话状态,并让会话状态可用于网络场中的多个Web服务器。(3)SQLServer模式:将会话状态存储到一个SQLServer数据库中,这确保了在重新启动Web应用程序时会保留会话状态,并让会话状态可用于网络场中的多个Web服务器。(4)Custom模式:允许用户指定自定义存储提供程序。(5)Off模式:禁用会话状态。Session对象使用会话状态的优缺点如下。1)使用会话状态的优点(1)易于实现。会话状态功能易于使用,为ASP开发人员所熟悉,并且与其他.NETFramework类一致。(2)会话特定的事件。会话管理事件可以由应用程序引发和使用。(3)持久性。放置于会话状态变量中的数据可以经得住Internet信息服务(IIS)重新启动和辅助进程重新启动,而不丢失会话数据,这是因为这些数据存储在另一个进程空间中。(4)平台可缩放性。会话状态对象可在多计算机和多进程配置中使用,因而优化了可缩放性方案。(5)尽管会话状态最常见的用途是与Cookie一起向Web应用程序提供用户标识功能,但会话状态可用于不支持HTTPCookie的浏览器。S
本文标题:Web应用
链接地址:https://www.777doc.com/doc-5699835 .html