登陆注册
8724600000027

第27章 软件构造(6)

②如果打算重复性地检索少量数据,或者检索的数据在每次使用数据时都需要尽可能地更新时,也最好使用DataReader。

在以下场合下考虑使用DataSet。

①如果应用程序不是立即“卸载”查询结果时,或者有大量的处理(如两次数据访问之间的事务逻辑处理)时,最好使用DataSet。DataSet检索数据后,将检索结果存放到内存中,并同时把连接返回到数据库连接池中,这样,DataReader可以在处理完成之前保持连接锁定在开启状态。这个特性会非常容易导致高流量的应用程序耗尽所有可用的数据库连接。

②当需要多次操作数据时,最好使用DataSet。例如,当多个控件需要获取同样的数据时,使用DataSet就比DataReader更加合适。这是因为后者只能读一次,一个DataReader只能对应一个控件,要实现此操作,每个控件就都要进行一次数据检索了。

③当数据的变化不是很频繁(即不要求每次使用数据时都从数据库重新检索它以保证它获得及时的更新)时,最好使用DataSet。DataSet可以保存在一个会话(Session)或者程序变量中,它也可以用System.Web.Caching.Cache类进行缓冲。这样可以降低从数据库直接检索数据的次数,使应用程序的性能有所提高。

④当建立返回检索数据的Web服务时,最好使用DataSet。由于DataSet是可串行化的,因此它可以作为返回值。而DataReader由于需要连续的数据库连接,因此它不能作为Web服务的返回值。

6.5ASP.NET

6.5.1ASP.NET概述

ASP.NET是一种建立在通用语言上的程序构架,能被用于一台Web服务器来建立强大的Web应用程序。ASP.NET提供许多比现在的Web开发模式强大的优势。主要有下列优点。

1.与传统的ASP比较

ASP采用VBScript作为主要编程语言,和大多数解释型语言一样,ASP致命的缺点是每次请求都要解释页面代码。ASP.NET则不同,它采用C、VB.NET等作为开发语言,基于.NET Framework之上,每次修改的代码编译成中间语言(MSIL)代码。加速了Web浏览速度,减轻了Web服务器负载,ASP.NET通过Code Behind文件、HTML页面和Web程序代码已经基本实现分离。ASP程序员习惯在HTML中直接嵌入代码,虽然ASP.NET仍然支持这样做,但是书中还是建议程序员克服这个困难,采用Code Behind文件来优化我们的网站结构。

2.执行效率的大幅提高

ASP.NET是把基于通用语言的程序在服务器上运行。不像以前的ASP即时解释程序,而是将程序在服务器端首次运行时进行编译。这样的执行效果,当然比一条一条地解释强很多。

3.世界级的工具支持

ASP.NET构架是可以用Microsoft(R)公司最新的产品Visual Studio.NET开发环境进行开发,WYSIWYG (What You See Is What You Get,所见即为所得)进行编辑。这些仅是ASP.NET强大化软件支持的一小部分。

4.强大性和适应性

因为ASP.NET是基于通用语言的编译运行的程序,所以它的强大性和适应性,可以使它运行在Web应用软件开发者的几乎所有的平台上。通用语言的基本库、消息机制和数据接口的处理都能无缝地整合到ASP.NET的Web应用中。ASP.NET同时也是languageindependent语言独立化的。所以,可以选择一种最适合自己的语言来编写程序,或者用很多种语言来编写程序,现在已经支持的有C(C++和Java的结合体)、VB和J。

将来,这样的多种程序语言协同工作的能力保护现在的基于COM+开发的程序,能够完整地移植于ASP.NET。

5.简单性和易学性

ASP.NET使运行一些很平常的任务如表单的提交、客户端的身份验证、分布系统和网站配置变得非常简单。例如,ASP.NET页面构架允许我们建立自己的用户分界面,使其不同于常见的VB Like界面。另外,通用语言简化开发使把代码结合成软件变得异常简单。

6.高效可管理性

ASP使用一种字符基础的、分级的配置系统,使服务器环境和应用程序的设置更加简单。因为配置信息都保存在简单文本中,新的设置有可能都不需要启动本地的管理员工具就可以实现。这种被称为“Zero Local Administration”的哲学观念使ASP.NET基于应用的开发更加具体和快捷。一个ASP.NET的应用程序在一台服务器系统的安装只需要简单地复制一些必需的文件,不需要系统的重新启动,一切就是这么简单。

7.多处理器环境的可靠性

ASP.NET已经被刻意设计成为一种可以用于多处理器的开发工具,它在多处理器的环境下用特殊的无缝连接技术,将很大地提高运行速度。即使现在的ASP.NET应用软件是为一个处理器开发的,将来多处理器运行时不需要任何改变都能提高它们的效能,但现在的ASP却做不到这一点。

8.自定义性和可扩展性

ASP.NET设计时考虑了让网站开发人员可以在自己的代码中自己定义“plug in”的模块。这与原来的包含关系不同,ASP.NET可以加入自己定义的任何组件。网站程序的开发从来没有这么简单过。

9.全性

基于Windows认证技术和应用程序配置,可以确信我们的源程序是绝对安全的。

6.5.2ASP.NET举例

1.Session的使用及概念

Session对象可以用来存储需要在服务器的多次请求—应答期间和对网页的请求期间进行维护的指定对话的信息。Session对象是每个对话存在的基础,也就是说不同的客户端生成不同的Session对象。存储在对话状态变量中的数据存在的周期较短,时间可以进行设置。

每个web应用程序必须有一个名字为web.config的配置文件,它是基于XML文件的。下面是一个名字为sessionState的对话:

若要使默认的超时时间(20分钟)延长一倍,可以将下列内容添加到应用程序的web.config文件:

Timeout=”40”

/sessionState>;

默认情况下,ASP.NET像ASP一样,在处理请求的同一进程中存储会话状态。如果cookie不可用,可以通过将会话标识符添加到URL来跟踪会话。若要启用此功能,请设置以下内容:

cookieless=”true”

/sessionState>;

cookieless选项的值为true或false。当其值为false(默认值)时,ASP.NET将使用HTTPcookie来识别用户;当其值是true时,ASP.NET将随机地生成一个唯一的号码,并将它放在被请求的文件的前面。这一号码是用来识别用户的,能够在IE的地址栏中看到它:http://localhost/(2yzakzez3eqxut45ukyzq3qp)/Default.aspx

在编程中随时可以使用session对象,不需要声明。

’存储信息

Session(”myname”)=”Mike”

’获得信息

myname=Session(”myname”)

2.cookie的使用及概念

cookie是存储在客户端文件系统的文本文件中或客户端浏览器对话的内存中的少量数据,浏览器对cookie的大小有限制,不能超过4096字节。可以用cookie检查用户在此前是否已经注册,以及保存用户的一些常用信息。

首先,创建cookie

’声明一个cookie变量

Dim cookie As HttpCookie

’判断CookieName是否存在,如果不存在创建它,存在就获取它

If Request.Cookies(”CookieName”) Is Nothing Then

cookie=New HttpCookie(”CookieName”)

Else

cookie=Request.Cookies(”CookieName”)

End If

’设置cookie过期时间为10秒

Dim ts As TimeSpan=New TimeSpan(0,0,10,0)

cookie.Expires=DateTime.Now.Add(ts)

’把cookie设为受管状态

Response.AppendCookie(cookie)

下面是利用cookie检查用户是否登录的一个VB.NET的例子。

if Request.Cookies(”username”)<;>;””then

’lbMessage是label控件的id

lbMessage.text=”你好!”&;Request.Cookies(”username”).Value

else

lbMessage.text=”你好!客人”

end if

保存用户常用信息,可以使用下面的代码:

Response.Cookies(”username”).Value=username;

3.如何在页面间传递参数

查询字符串提供了一种简单而受限制的页面传递信息的方法,可以方便地将信息通过URL从一个网页传递给另一个网页,但大多数浏览器和客户端装置都把URL的长度限制在255个字符长。还有就是,查询值是通过URL在网页间传递的,因此在有些情况下,安全就成了一个大问题。

带有查询字符串的URL如下所示:

http://www.examples.com/list.aspx?categoryid=1&;productid=101

当有客户端请求list.aspx后,可以通过下面的代码获取目录和产品信息:

Dim categoryid as string

Dim productid as string

categoryid=Request.Params(”categoryid”)

productid=Request.Params(”productid”)

4.如何设置web.config

ASP.NET资源的配置信息包含在一组配置文件中,每个文件都命名为web.config。每个配置文件都包含XML标记和子标记的嵌套层次结构,这些标记带有指定配置设置的属性。因为这些标记必须是格式正确的XML,所以特别要注意标记、子标记和属性是区分大小写的。如果大小写错误,在编译期会报错误。

在这里只介绍web.config中最常用、最重要的一些配置项:

自定义错误信息默认的设置为RemoteOnly。

如果要自定义出错页面,可以设置customErrorsmode=“On”或“RemoteOnly”,以启用自定义错误信息。设置为“Off”是禁用自定义错误信息。

可以如下设置:

这里RemoteOnly和On的区别就在于:自定义出错页面只对远程访问有效,本地还是显示调试信息。

mode=”InProc”

stateConnectionString=”tcpip=127.0.0.1:42424”

sqlConnectionString=”data source=127.0.0.1;user id=sa;password=”

cookieless=”false”

timeout=”20”

/>;

会话状态设置,默认会话模式为“InProc”及进程类会话,此模式下会话状态与ASP.NET辅助进程一起执行。如果IIS服务器重新启动,则所有的会话都会遭到破坏。

Mode还可以设置为StateServer模式,此模式将ASP.NET状态服务(存储会话状态信息)运行在远程服务器上。即使IIS重启,会话状态也能得以保留。SQL Server模式是利用SQL Server来保存会话状态,但此模式效率比较低,一般不采用。

默认情况下,ASP.NET使用cookie标识哪些请求属于特定的会话。如果cookie不可用,则可以通过将会话标识符添加到URL来跟踪会话。若要禁用cookie,请设置sessionStatecookieless=“true”。

同类推荐
  • 信息安全

    信息安全

    我们不得不看到,全球信息化发展,使信息安全成为维护国家安全的重要屏障,信息安全问题正在为国与国之间带来新的制约关系。当然,这只是我们强调信息安全极端重要性的一个原因。事实上,信息安全已经上升为国家安全的重要组成部分,这是信息时代国家安全的明显特征,也是很多国家的共识。但与其他国家安全元素不同,如果脱离信息化发展的环境,“信息安全”只是一个抽象的目标,它要通过对国家的政治、经济、文化等方面的影响体现其对国家安全的意义,并以保障信息化发展为目标取向。因此,我们说信息安全是信息时代国家安全的基石。
  • 中国网络传播研究2009(第三辑)

    中国网络传播研究2009(第三辑)

    本文以传统社区研究的“场域论”为基础,探讨网络传播中场域性互动对社会舆论的影响。文章首先从传统社区传播的场域性特征出发,探讨网络传播的社区性和场域性。然后分别分析了传统门户、BBS论坛和私人博客等三种主流的网络传播的场域性互动、意见表达和舆论形成的特点。最后结合“张殊凡事件”、“王石捐款”事件以及“黑砖窑”事件,探讨网络传播中的场域性互动对社会舆论从虚拟到现实的影响。
  • EDA技术

    EDA技术

    根据课堂教学和实验操作的要求,以提高实际工程设计能力为目的,深入浅出地对EDA技术相关知识作了系统和完整的介绍,相关知识作了系统和完整的介绍。
热门推荐
  • 逆倒轮回

    逆倒轮回

    这是修神者的世界,有威力绝伦的体术,有神通奇绝的术法,更有神秘莫测的血赋之体。少年双天宝,一个人,一团神秘蓝光,开始一场惊心动魄,荡气回肠的爱恨情仇之旅。云端,地底,洞窟,荒海,绝地,仙府,妖兽,邪修。至此拉开序幕!等级划分:引气,筑基,灵动,培元,凝神,血赋,觉醒,熔魂,分神,渡劫。
  • 这是用来搞事情的小短篇

    这是用来搞事情的小短篇

    送你,送你,扶摇直上九万里,肩并太阳不得闲,手中持握大长刀,让你先跑三十九
  • 嫡女有毒:王的复仇宠妃

    嫡女有毒:王的复仇宠妃

    本应是庆国首富家受宠嫡女,母亲遭受父亲小妾陷害,被逼自尽。她十三岁就背负血海深仇,却遭到毒害,替亲妹而死。当她重生变成敌国大周最受宠的公主,她发誓所有的罪孽,她要一一讨回。她要变得更强,哪怕付出一切,也要洗刷耻辱。首富嫡女也罢、大周公主也罢、庆国睿王妃也罢,她要得到的都会得到。
  • 金陵花娇

    金陵花娇

    庄钰筱本是个娇娇,最后却落得家破人亡,青灯古佛。再睁眼,又回到娘亲去世……然后原本万千宠爱,诸事不谙的小姐,步步为营,小计小谋
  • 恰情如梦

    恰情如梦

    她被迫女扮男装,混入豪门,面对名义上的弟弟,她不由自主的沦陷了,但没想到,更大的阴谋正在展开,原来一切都不是偶然,冥冥之中的一切宛如一场梦...各位亲~琪琪保证一天一更,欢迎各位收藏~
  • 毒医狂妃要翻身

    毒医狂妃要翻身

    第一毒医穿越到司徒家废材九小姐身上,阉皇子,弑亲姐,血洗皇宫,惊动了整个苍茫大陆!他在寺院代发修行数十年,“女施主,你就从了吧。”“对不起噢,姑奶奶我只喜欢高富帅,对你这种小和尚不感冒。”第二日,他变身至尊之首,万凰之王,倚在龙椅上,“宝贝,从不从?”--情节虚构,请勿模仿
  • 重生豪门之夏爷的神医悍妻

    重生豪门之夏爷的神医悍妻

    重生前——叶简瑜一直逃,逃离夏瑾沉……重生后——“夏爷,累了吗”。。。“夏爷,饿了吗”。。。“夏爷,想我了吗”。。。365度环绕式“纠缠”。夏二爷当面白眼,背后偷笑。然,拿乔过了,二爷反追悍妻,泪两行……宠文,无虐,男腹黑女强悍
  • 恶魔恋上天使之烈火青春

    恶魔恋上天使之烈火青春

    谁都渴望生命中有一场烈火般的青春,青春里有一场永世长存的友情和至死不渝的爱情。她(他)们是来自不同国家,一次”预某“让她们成为闺蜜;他们是从小就在一起的好兄弟。一次意外的相遇,让她(他)们有了交际,而这场意外的相遇是”巧合“还是”命运的安排“。她(他)们将如何在属于她(他)们的舞台上放射出自己独有的光芒?又如何上演一场关于他(她)们之间烈火般青春的友情与爱情呢?
  • 海贼之刃返

    海贼之刃返

    穿越海贼世界成为天龙人后裔。苏纪学体术、练剑术,想方设法都是为了打败梦中的那只兔女郎……
  • 蔓舞风月夕

    蔓舞风月夕

    坠入阿凡达式的幻想异境,有三色大陆、奇峰巍峨,秀木灵兽,----------------当她以重生的代价遇到东方古典气息的神秘男子,若即若离,缠绵悱测,不断的试探与反试探间,失去的珍爱能否寻回?