日期:2013-08-14  浏览次数:21211 次

认识Microsoft公司的Asp.net有一段时间了,感觉asp.net确实在功能方面和性能方面比asp有了很大的改进(之前,我一直在写asp程序),并总结了一些内容,这里和大家分享一下。由于笔者经验很少,所以文中有在技术上的错误或者需要改进的地方,欢迎和我交流。

由于个人比较喜欢使用C#语言,所以例子里大多都是用C#示例的,但是这里主要是阐述一些原理性的东西,所以没有过多的依赖于具体的语言,如果你比较偏向于VB可以参考下面这篇文章来暂时转换一下自己的思想:

代码换肤术——C#和VB

http://blog.csdn.net/onlytiancai/archive/2004/07/16/43137.aspx

vb.net和c#语法比较

http://blog.csdn.net/onlytiancai/archive/2004/07/16/43134.aspx



我想从以下几方面谈谈我的体会,主要想写一下从安全和性能方面考虑的一些抉择问题

1.web用户控件,web自定义控件,后台编码类,.net组件的使用场合:

2.缓存(CACHE和APPLICATION)的使用场合:

3.web服务和组件类的使用场合:

4.vb.net和C#的使用场合:

5.DataReader和DataSet的使用场合:

6.数据库和xml数据的使用场合:

7.字符串连接符和stringBuilder的使用场合.

8.基于windows和基于form身份验证的使用场合.

9.静态方法和非静态方法的使用.

10.HTML控件和服务器控件的使用场合.

11.客户端技术技术和服务端技术的使用场合.

12.DTD和Schema的使用场合

13.字符串处理函数和正则表达式的使用场合.

14.web服务的同步条用和异补调用的使用场合

15.实例化类和继承类的使用场合

16.单值绑定和多值绑定的使用场合



1. web用户控件,web自定义控件(自定义服务器控件),后台编码类,.net组件(程序集)的使用场合:

这几种技术都是用来复用代码的,但是使用的场合有所不同,下面我会尽力说明它们各自之间的不同以及之间的联系。

先来看一下web用户控件和web自定义控件的特点:





Web用户控件
Web自定义控件

web用户控件容易创建,
web自定义控件难于创建,

只能为使用可视化设计工具的使用者提供有限的支持
为使用者提供完全的可视化设计工具支持

每个应用程序中需要控件的一个单独副本
仅在全局程序集缓存中需要控件的单个副本

不能添加到Visual Studio 中的工具箱
可以添加到 Visual Studio 中的工具箱

适用于静态布局
,适用于动态布局.






综上可以看出,web用户控件适用于:

1.页面上复用的元素,如标题,产品目录,菜单,注册控件等。

2.利用用户控件的高速缓存功能,高速缓存常常浏览的页面,可以提高页面的性能。

3.把重复的页面元素封装到用户控件里,减少了每个页面上的代码量

但是,如果要创建一个比自己所在的应用程序更广泛的复用的控件时候,就需要考虑使用web自定义控件了.

如果你安装有MSDN,关于使用web用户控件和web自定义控件的建议可以参考下面的链接。

ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/vbcon/html/vbconwebusercontrolsvscustomwebcontrols.htm

举个例子来说明怎样建立用户控件:


Hello, 我是蛙蛙

把上面的代码保存为wawaUC.ascx这个用户控件就建好了。(调用用户控件的时候需要指定这个地址)

下面举个例子来说明怎样缓存用户控件。编写好控件后在.ascx文件的最上面加上下面一句就可以实现控件的高速缓存(碎片缓存)了。


把用户经常访问但不经常更新的数据做成用户控件并高速缓存起来,而一些实时的信息不要缓存,这样就可以提高页面整体的性能,而不至于让一些实时的信息不能及时的更新。

简单解释一下OutputCache的几个参数,这个标记在.aspx和.ascx中都可以使用

OutputCache:使用高速缓存。

Duration:指定高速缓存内容的时间,单位时秒

Location: 设置为Server时只在服务器使用缓存,设置为Downstream时中间的网络代理也可以高速缓存页面的副本,设置为Client表示浏览器可以高速缓存页面,设置为Any时表示这些高速缓存都可以使用

VaryByControl:允许高速缓存页面上的控件,这个标志时在.aspx页上使用的。

VaryByParam:根据POST传递参数来形成不同版本的缓存,想在任何时候都高速缓存整个页面可以把值设置为none,如果希望所有的参数使用不同版本的缓存可以把参数设置为*。

VaryByCustom:根据不同版本的浏览器形成不同版本的缓存,或者用指定的字符串来形成不同版本的缓存,设置为browser就可以为不同版本的浏览器使用不同版本的缓存,这在不同的浏览器或设备上显示数据是很有用。

VaryByHeader:根据不同的http头形成不同的缓存。

自定义服务器控件可以在不同的应用程序之间重用代码,你可以从头开始用html来建立自定义控件,也可以在现有的服务器控件建立自定义控件(一般把这样的控件称做合成控件)。举个例子来说明怎样建立自定义服务器控件:

using System;

using System.Web.UI;



namespace wawaControls

{

public class helloControl : Control

{

protected override void Render (HtmlTextWriter writer)

{

writer.Write(“

hello,蛙蛙
”);

}

}

}

从中可以看出,自定义的用户控件继承自System.Web.UI. Control ,并重写了Control类的Render方法来改变了Control类的默认输出,然后用HtmlTextWriter控件又可以输出任意的Html代码和脚本代码,这样以来任意复杂的自定义控件了。

把上面的代码保存为MyCustomControl.cs

写好代码后需要编译成.dll文件,用.net框架自带的CSC命令工具来完成,先写个批处理文件,如下:

Set assemblies=System.dll,System.Web.dll

csc /t:library /out: MyCustomControl.dll MyCustomControl.cs /r:%assemblies%

pause

简单介绍一下csc命令的使用参数:

/t表示输出类型,这里用library,表示输出为.dll文件,此外还可以是exe(控制台程序),winexe(windwos程序)等,/out表示你要输出的文件名,紧跟其后的是你要编译的文件名,/r表示你需要把那些文件编译入到要生成的文件中,这里是用set命令先把System.dll,System.Web.dll定义了一个变量然直接使用的,最后用一个pause命令暂停输出。注意,set和pause是系统的控制台(cmd)命令,它源自与古老的DOS。把上面的代码保存为一个.bat批处理文件,双机运行就可以生成.dll文件了,最后把这个文件放入bin目录备用。

在使用用户控件和自定义控件时,有些不同。

用户控件调用示例如下:首先在需要调用控件的开头输入下面的代码。


然后在合适的位置