明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

ASP.NET 打造互聯(lián)網(wǎng)未來空間站(3)

[摘要]程序員話題 下面我們談一談開發(fā)人員如何快速地開始ASP.NET的程序設計。你發(fā)現(xiàn)ASP.NET中什么東西比ASP更吸引人?有些人說是配置,ASP.NET配置起來更容易嗎?因此,我想談論關于這個問題的一點內(nèi)容。我們的確發(fā)現(xiàn)ASP.NET的一個優(yōu)點是可以簡單地配置。由于ASP.NET的應用程序是由編譯...
程序員話題

下面我們談一談開發(fā)人員如何快速地開始ASP.NET的程序設計。

你發(fā)現(xiàn)ASP.NET中什么東西比ASP更吸引人?
有些人說是配置,ASP.NET配置起來更容易嗎?因此,我想談論關于這個問題的一點內(nèi)容。我們的確發(fā)現(xiàn)ASP.NET的一個優(yōu)點是可以簡單地配置。由于ASP.NET的應用程序是由編譯過的代碼組成,所以不需要注冊DLL或者停止某些服務。例如,在今天的ASP環(huán)境中,如果在你的網(wǎng)站上,有一個非常重要的商業(yè)組件需要被一個功能更加強大的組件替換時,你將不得不暫停WEB站點的服務,以便使得DLL不被鎖定。然后替換該組件,重新在系統(tǒng)中注冊,重新啟動你的WEB站點,這樣做的結(jié)果是在某一段的時間里,你的站點將不能對外工作。然而,令人興奮的是在ASP.NET中,你不需要在做上面的任何工作,你在也不必考慮那個該死的regsrv32。你只需要將這個新的DLL放到與老的DLL系統(tǒng)的目錄下。當前訪問的新的DLL的請求仍然在工作,新的請求將會觸發(fā)新的DLL,這一切會持續(xù)到老的DLL完成所有的請求時為止。那時,新的DLL就會代替老的DLL,這一切不會引發(fā)停機,這一切只需要調(diào)用XCOPY的配置功能,這一切使得我們的工作更有效率,更加簡潔。

這樣做的好處是不用再考慮哪個DLL需要關閉,然后再關閉它;哪個DLL中有BUG。是否有一種方式可以使得當前應用的所有的DLL迅速的被關閉,還是必須要將WEB站點停掉。
對我來說,保留它前面的版本,后面的版本是一件很容易的事情。只需要利用XCOPY重新配置一下就可以了,那些DLL很快會被自己替換。

好了,除了前面所見的配置簡單的這個特性以外,你們還有那些優(yōu)點足以吸引ASP 程序員快速移植到ASP.NET環(huán)境中?
這個問題問得好,如果我是一個VB程序員,當我進入ASP編程環(huán)境時,我會發(fā)現(xiàn),他是如此熟悉,我樂意立刻在那里編制程序。我不用擔心那些腳本語言,不用再考慮那種從頭到尾都是線性的處理模型,我可以在ASP.NET中使用更新的邏輯關系,使用提供的更多新服務器組件,提供比ASP程序更多的功能。
確實是這樣的,ASP.NET節(jié)省了我們大量的的開發(fā)時間,你可以在同樣的環(huán)境下開發(fā)供ASP+頁面調(diào)用的DLL,并且可以安全的使用。然而,對大多數(shù)的開發(fā)者來講,最大的收益來自于他提供的caching功能。
我們都理解caching功能對于標準的web頁面的重要性,客戶端的caching可以使得頁面很快重現(xiàn),服務器端的caching存儲了一些已經(jīng)編譯過的代碼,可以提訪問的速度。
我們下面舉一個caching的例子,一個在線的商店,這是一個銷售CD的網(wǎng)上商店,在他的主頁面上,你列舉了一系列的商品。因此,你使用了數(shù)據(jù)庫存儲商品信息、價格信息、種類信息等。當ASP腳本訪問數(shù)據(jù)庫時,不可避免地會有時間延遲。但是,當你使用caching時,一些訪問過的信息將會留在caching中。當請求的信息在caching之內(nèi)被檢索的時候,caching中的頁面作為原頁面輸出,因此,你不必在訪問數(shù)據(jù)庫就可以獲得數(shù)據(jù),因為他們已經(jīng)在caching中了。.NET框架會一直監(jiān)視caching中的頁面,如果這些頁面相關的數(shù)據(jù)庫的信息發(fā)生了變化,他就會立即更新這些頁面。因此,你不必擔心得不到最新的數(shù)據(jù)信息。通過caching的設置功能你還可以設置caching的時間長度,規(guī)定他在多長時間內(nèi)定期更新caching中的內(nèi)容,你也可以在caching中緩存頁面的點擊數(shù)?傊ㄟ^caching技術,你實際上為你站點的用戶提供了快速獲得信息的可能性。在本質(zhì)上,他實際上直接獲取的是生成好的HTML頁面,從而避免了一系列的頁面生成的過程。

caching將真正幫助網(wǎng)站的開發(fā)人員調(diào)整網(wǎng)站的性能以及快速的相應客戶的請求。
是的。實際上你可以看到這樣的情形---網(wǎng)站服務器每秒鐘可以相應更多的點擊數(shù),因為用戶大部分的請求都落在caching中。

從開發(fā)人員的角度來看,如果他們在編寫第一個ASP.NET程序時,他們會遇到哪些大的困難?
我對您的話感到吃驚,從ASP到ASP.NET并沒有不可逾越的障礙。他們只是在一些細節(jié)上有所不同。當然有許多的是要引起注意的。例如,我們過去常用ASP與VB SCRIPT編寫程序,當我們想創(chuàng)建一個record set對象的時候,我們不得不SET一個變量等于record set。在ASP.NET中沒有SET這個參數(shù),直接就是變量等于ADO records set對象。所以,在ASP與ASP.NET之間僅有一些小的語法的差異,這些小的語法差異根本不會影響到頁面的性能,但是如果你將ASP程序移植到ASP.NET上時,你要注意這些小的差異。實際上,從ASP遷移到ASP.NET的代碼量是很少的,不必考慮將整個程序代碼移植,這兩者實際上是可以并存的。因此你不必強制將你的網(wǎng)站的程序立即移植到ASP.NET上,你可以在新的工作中逐漸采用新的ASP.NET技術。

我想,你仍然可以像你從前那樣聲明你所有的數(shù)據(jù)類型。你仍然可以使用Server.CreateObject,你仍然可以使用 DIM RS,定義一個record set對象,你仍然可以使用DIM RS AS NEW ADO record set這種方式,對嗎?

這只是我們的一種選擇,在我們最少量的移植級別里面,你實際上不用考慮ASP 與ASP.NET的區(qū)別。你仍然可以使用 DIM RS 的方式,并且用這種方式創(chuàng)建與數(shù)據(jù)及相關的對象。這兩者之間的主要區(qū)別是一個是用VB SCRIPT創(chuàng)建的對象,另一個是用VB創(chuàng)建的對象。
這么說,你們現(xiàn)在是已經(jīng)改變到一種擁有類型的開發(fā)語言平臺上了?
你說的很對,我們有數(shù)據(jù)類型了。我們現(xiàn)在更嚴格的進行應用程序的內(nèi)存管理,而不是將每一件事情能夠都看成是變量,我們現(xiàn)在可以將不同的事物看成string、 integer、a data set,因此我們可以更好地控制內(nèi)存的使用。

接下來,我們應該演示一些代碼用以解釋上面所說的一些東西。
好的。我們的第一個問題是移植問題。這是一個典型的ASP代碼的頁面,我們將從數(shù)據(jù)庫中取出數(shù)據(jù)放到表中。我們來看一下這些代碼,我們首先定義了我們的connection 和我們的 record set, 我們創(chuàng)建了這些對象,我們用SET關鍵字設置我們的record set 等于connection的執(zhí)行。接下來是一個DO WHILE 循環(huán),將數(shù)據(jù)庫中的信息顯示在頁面上。
<%
Dim con, rs
Set con = Server.CreateObject("ADODB.Connection")
con.Open "Provider=SQLOLEDB;server=(local);database=Northwind;UID=sa;PWD=;"
Set rs = con.Execute("SELECT ContactName, City FROM Customers")
%>
<html>
<body>
<table border="0">
<tr>
<td>ContactName</td>
<td>City</td>
</tr>
<%
Do While Not rs.EOF
%>
<tr>
<td><%=rs("ContactName")%></td>
<td><%=rs("City")%></td>
</tr>
<%
rs.MoveNext
Loop
%>
</table>
</body>
</html>
如果轉(zhuǎn)到.NET框架下,僅需要少量的移植工作。我們可以看見哪些東西已經(jīng)被改變了,哪些東西不能使用了。我們在Set con = Server.CreateObject("ADODB.Connection")和Set rs = con.Execute("SELECT ContactName, City FROM Customers")中所使用的set之類的關鍵字一去不復返了。但是在這里我要指出的是,在下面的代碼中,我們在rs("ContactName")和rs("City")的右邊添加了一個屬性Value。他的基本含義是,我們可以獲得指定行或者指定列的值。從ASP到ASP.NET也就這些改動,實際上有很少的變化,你可以看到ASP與ASP.NET代碼之間幾乎一樣,沒有什么特別大的變化。
<%
Dim con, rs
con = Server.CreateObject("ADODB.Connection")
con.Open("Provider=SQLOLEDB;server=(local);database=Northwind;UID=sa;PWD=;")
rs = con.Execute("SELECT ContactName, City FROM Customers")
%>
<html>
<body>
<table border="0">
<tr>
<td>ContactName</td>
<td>City</td>
</tr>
<%
Do While Not rs.EOF
%>
<tr>
<td><%=rs("ContactName").Value%></td>
<td><%=rs("City").Value%></td>
</tr>
<%
rs.MoveNext
Loop
%>
</table>
</body>
</html>

這是很吸引人的,那些SET關鍵字被去掉了,VALUE關鍵字被引入,代碼本身實際上沒有什么變化,因此只要你看看輸出結(jié)果,你就會發(fā)現(xiàn)他們基本上是一致的。但是,ASP.NET是運行在.NET框架下,他的頁面擴展名是.ASPX,當然我們在該頁面也可以實現(xiàn)CACHE的功能,只不過在這個程序中沒有用到罷了。如果我們將上面的實例進一步深入下去并且考慮應用.NET框架和ASP.NET框架所提供的一些更為便利的手段。例如,用managed providers來獲取數(shù)據(jù),那么我們將以入下面這個事例。我們依然工作在SQL 7.0上的NorthWind數(shù)據(jù)庫中。
.NET提供了一個重要手段是SQL managed provide,它可以直接連接到SQL上獲得數(shù)據(jù)而不必通過OLEDB這樣的東西,這種方式經(jīng)過實踐被認定是大大提高了訪問速度。我們可以看一下下面的代碼,他們使用純粹的VB而不是VBs編寫的。但是輸出的結(jié)果幾乎一樣讀。我們要做的事情是import 一些namespaces , System.Data,這樣我們就會有最基本的數(shù)據(jù)處理能力以及獲得對SQL managed provider訪問能力的 SQL namespace。這些代碼的風格與前面討論的C#的風格好象很一樣,那時我們使用C#來處理基于.NET架構的各種類庫,現(xiàn)在我們所見到的在VB中的.NET類庫與C#中的類庫具有相同的風格。
這兩者之間的確是同一種風格。如果我用C#編寫,代碼會不同,但是namespace(名字空間)是一致的。對于編寫ASP.NET的程序,這兩種方法都是很好的。盡管某些類可能會有一些不同,但是我們可以僅僅修改幾個的地方,就可以將VB代碼快速移植成C#代碼。
實際上,許多代碼將不會被改變(一直保留下來)。例如,SQL connection 字符串只需要改變一點點, SQL select statement 字符串不會有什么改變。在這里,我們強調(diào)一下,對于connection 字符串我們不再使用 ADO provider,不再使用SQL OLEDB作為ADO provider,因為我們使用了SQL managed provider,因此我們提倡使用SQL7.0以上的版本,他能給我們更好的性能。我們創(chuàng)建一個data set用以保存我們的數(shù)據(jù)以及后來訪問的結(jié)果。我們用SQLDataSetCommand檢索SELECT的結(jié)果,并返回頁面,將他們插入到data set中,我們命名這個表為Customers。因此,我們現(xiàn)在有一個data set對象,他包含了一個Customers表。如果需要的話,我們可以加入更多的表和更多的關系。與ADO records set不同的是,我們現(xiàn)在可以處理更大的事情,我們可以將整張大表分成若干個小表,而他們之間的關系去保持不變,這種方式有利于更大的程序應用開發(fā)。.
<head>
<script runat="server">
Sub Page_Load(Source As Object, E As EventArgs)
Dim ds As New DataSet
Dim dsc As SQLDataSetCommand
dsc = New SQLDataSetCommand("SELECT ContactName, City FROM Customers", _
"server=localhost;database=Northwind;UID=sa;PWD=;")
dsc.FillDataSet(ds, "Customers")
dgCustomers.DataSource = ds.Tables("Customers").DefaultView
dgCustomers.DataBind()
End Sub
</script>
</head>
.
接下來,我們跳過幾行代碼,直接顯示與ASP data grid server控件相關的代碼。ASP data grid server的作用是提供一個最基本的表。我們要做的唯一的一件事情是告訴他我們要在服務器端運行他,他是服務器端的控件。接下來我們設置the border寬度為零 ,因為上面的例子中border="0"。此外,我們新加了一個屬性,他用來改變items的背景色。他用來標識在ASP表中不同表格項的顏色,這樣便于區(qū)分。當然,你要寫很多的代碼,用循環(huán)的方式改變每一個項目的背景色,在這里我們簡化一下工作,只是標志這個屬性。他表現(xiàn)的色彩是淺灰色。

<body>
<asp:DataGrid id="dgCustomers" runat="server"
AlternatingItemStyle-BackColor="#CCCCCC"
BorderWidth="0"
/>
</body>
</html>