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的).
<%@ Page Language="C#" %>
<html>
<script language="javascript">
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;
}
</script>
<body>
<h3>ASP.NET驗證使用者輸入</h3>
<form method=post runat=server>
<hr width=600 size=1 noshade>
<table>
<tr>
<td>
<asp:ValidationSummary ID="valSum" runat="server"
HeaderText="你必須輸入下面這些表單域:"
DisplayMode="bulletlist"
Font-Name="宋體"
Font-Size="12"
/>
</td>
</tr>
</table>
<center>
<p>
<!-- 登陸資訊 -->
<table border=0 width=600 >
<tr><td colspan=3>
<table border=0 cellpadding=0 cellspacing=0 width="100%">
<tr><td>
<b>登陸資訊</b>
</td></tr>
</table>
</td></tr>
<tr>
<td align=right>
Email地址:
</td>
<td>
<asp:TextBox id=email width=200px maxlength=60 runat=server />
</td>
<td>
<asp:RequiredFieldValidator id="emailReqVal"
ControlToValidate="email"
ErrorMessage="Email地址"
Display="Dynamic"
Font-Name="宋體"
Font-Size="12"
runat=server>
*
</asp:RequiredFieldValidator>
<asp:CustomValidator id="emailRegexVal" runat="server"
ControlToValidate="email"
ClientValidationFunction="ClientValidateEmail"
Display="Static"
Font-Name="宋體"
Font-Size="12">
非法Email地址
</asp:CustomValidator>
</td>
</tr>
<tr>
<td align=right>
密碼:
</td>
<td>
<asp:TextBox id=passwd TextMode="Password" maxlength=20 runat=server/>
</td>
<td>
<asp:RequiredFieldValidator id="passwdReqVal"
ControlToValidate="passwd"
ErrorMessage="使用者密碼"
Display="Dynamic"
Font-Name="宋體" Font-Size="12"
runat=server>
*
</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator id="passwdRegexBal"
ControlToValidate="passwd"
ValidationExpression=".*[!@#$%^&*+;:].*"
Display="Static"
Font-Name="宋體" Font-Size="12"
Width="100%" runat=server>
密碼必須包含如下字元: (!@#$%^&*+;:)
</asp:RegularExpressionValidator>
</td>
</tr>
<tr>