日期:2009-11-24  浏览次数:20417 次

  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 ID="valSum" 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 width="100%"$#@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 id="emailReqVal"
ControlToValidate="email"
ErrorMessage="Email地址"
Display="Dynamic"
Font-Name="宋体"
Font-Size="12"
runat=server$#@62;
*
$#@60;/ASP:RequiredFieldValidator$#@62;
$#@60;ASP:CustomValidator id="emailRegexVal" 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 id="passwdReqVal"
ControlToValidate="passwd"
ErrorMessage="用户密码"
Display="Dynamic"
Font-Name="宋体" Font-Size="12"
runat=server$#@62;
*
$#@60;/ASP:RequiredFieldValidator$#@62;
$#@60;ASP:RegularExpressionValidator id="passwdRegexBal"
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;