ASP.NET升级能力探讨
Scalability 总是与我的最后一个话题 performance 缠绕在一起,但事实上,它们是完全不同的两个问题。在Performance 一节里,我已谈及了 caching, 它是scalability 最大的改进之一,因此,我(作者)在想,我还得找些其它一些内容在这节里讨论。
首先,此系统建成,本身有着一定的特性,以改进多处理器和串环境中的性能。例如,session state 能够通过单独的处理器来维持,在一个单独的机器上,甚至在数据库中允许交叉的服务器sessions。通过这样,即使在开发过程中你没有想过会快速增加的流量,也可以相对容易的增加更多的网络服务器。
这儿同样有一些被称作“web花园”的东西,我也不太完全了解。但是,它们可以帮助多处理器的机器,帮助它们做比单处理器更多的工作。我认为它是个非常新奇的想法,但是,也有人认为他们不会使用这项功能。
因此,你已经拥有了建立一个完善的web农场的工具,但是如何使它们不停的运作呢?当然,ASP。NET runtime会监控并管理进程。当有漏洞或者是死锁时,runtime会自动关闭,但是只需等待,它会恢复。在老版本关闭之前,一个新的版本会在老版本的位置启动以覆盖老版本。Runtime然后会引导新的指令至新的工作进程并排斥老指令然后关闭。因为有了替换,最后用户是不会发现任何改动的。
在介绍这么多ASP.NET 的高性能后,下面我将介绍几个例子。
先举一个c#的例子
验证用户表单输入
运行环境:Win2000 Advance Server+IIS5.0+NGWS SDK(80M的).
$#@60;%@ Page Language="C#" %$#@62;
$#@60;html$#@62;
$#@60;script language="javascript"$#@62;
function ClientValidateEmail(source, value)
{
var strr;
re=/(\w+@\w+\.\w+)(\.{0,1}\w*)(\.{0,1}\w*)/i;
re.exec(value);
if (RegExp.$3!=""&&RegExp.$3!="."&&RegExp.$2!=".") strr=RegExp.$1+RegExp.$2+RegExp.$3
else
if (RegExp.$2!=""&&RegExp.$2!=".") strr=RegExp.$1+RegExp.$2
else strr=RegExp.$1
if (strr!=value)
return false;
else
return true;
}
$#@60;/script$#@62;
$#@60;body$#@62;
$#@60;h3$#@62;ASP.NET验证用户输入$#@60;/h3$#@62;
$#@60;form method=post runat= ver$#@62;
$#@60;hr width=600 size=1 noshade$#@62;
$#@60;table$#@62;
$#@60;tr$#@62;
$#@60;td$#@62;
$#@60;asp:ValidationSummary runat="server"
HeaderText="你必须输入下面这些表单域:"
DisplayMode="bulletlist"
Font-Name="宋体"
Font-Size="12"
/$#@62;
$#@60;/td$#@62;
$#@60;/tr$#@62;
$#@60;/table$#@62;
$#@60;center$#@62;
$#@60;p$#@62;
$#@60;!-- 登陆信息 --$#@62;
$#@60;table border=0 width=600 $#@62;
$#@60;tr$#@62;$#@60;td colspan=3$#@62;
$#@60;table border=0 cellpadding=0 cellspacing=0$#@62;
$#@60;tr$#@62;$#@60;td$#@62;
$#@60;b$#@62;登陆信息$#@60;/b$#@62;
$#@60;/td$#@62;$#@60;/tr$#@62;
$#@60;/table$#@62;
$#@60;/td$#@62;$#@60;/tr$#@62;
$#@60;tr$#@62;
$#@60;td align=right$#@62;
Email地址:
$#@60;/td$#@62;
$#@60;td$#@62;
$#@60;asp:TextBox id=email width=200px maxlength=60 runat=server /$#@62;
$#@60;/td$#@62;
$#@60;td$#@62;
$#@60;asp:RequiredFieldValidator
ControlToValidate="email"
ErrorMessage="Email地址"
Display="Dynamic"
Font-Name="宋体"
Font-Size="12"
runat=server$#@62;
*
$#@60;/asp:RequiredFieldValidator$#@62;
$#@60;asp:CustomValidator runat="server"
ControlToValidate="email"
ClientValidationFunction="ClientValidateEmail"
Display="Static"
Font-Name="宋体"
Font-Size="12"$#@62;
非法Email地址
$#@60;/asp:CustomValidator$#@62;
$#@60;/td$#@62;
$#@60;/tr$#@62;
$#@60;tr$#@62;
$#@60;td align=right$#@62;
密码:
$#@60;/td$#@62;
$#@60;td$#@62;
$#@60;asp:TextBox id=passwd TextMode="Password" maxlength=20 runat=server/$#@62;
$#@60;/td$#@62;
$#@60;td$#@62;
$#@60;asp:RequiredFieldValidator
ControlToValidate="passwd"
ErrorMessage="用户密码"
Display="Dynamic"
Font-Name="宋体" Font-Size="12"
runat=server$#@62;
*
$#@60;/asp:RequiredFieldValidator$#@62;
$#@60;asp:RegularExpressionValidator
ControlToValidate="passwd"
ValidationExpression=".*[!@#$%^&*+;:].*"
Display="Static"
Font-Name="宋体" Font-Size="12"
Width="100%" runat=server$#@62;
密码必须包含如下字符: (!@#$%^&*+;:)
$#@60;/asp:RegularExpressionValidator$#@62;
$#@60;/td$#@62;
$#@60;/tr$#@62;
$#@60;tr$#@62;