ASP.NET移植須知

來源:互聯網
上載者:User
asp.net ASP.NET移植須知

統一教學網
日期:2001-11-5 9:05:00
出處:ZDNet.com.cn
作者:未知
雖然微軟ASP.NET的設計人員在ASP 應用程式的向後相容工作上做得相當出色,在致力於把Web應用程式從ASP遷至ASP.NET的時候,有幾點需要特別注意。切實理解由.NET平台改變或引入的技術及ASP.NET,會使移植過程變得相對簡單。

為增進您對如何使ASP應用程式在ASP .NET 環境中順利運作的瞭解,本文著重探索了很多技術變化的方面。同時 ,也指出一些ASP.NET中可被用來改進現有應用程式的新功能。這並不是一篇全面認識ASP.NET新功能的文章。它主要涉及您所需要瞭解的實現成功移植的內容。

既然大多ASP 應用程式使用微軟Visual Basic® Scripting Edition (VBScript),我估計您們大多會選擇使用Visual Basic .NET移植到ASP.NET。這顯然並不是必要條件,但在決定移植的同時改變程式設計語言會需要一些額外的努力,而且很可能會要求設計上的改變。

共存
在我們開始討論具體的相容與移植的問題前,您必須明白ASP與ASP.NET 如何共存。ASP與ASP.NET應用程式可以在伺服器上共同運行而不互斥。這主要是因為這兩種技術使用的檔案尾碼(.asp versus .aspx)與配置模式(metabase/registry versus XML-based configuration files)都有所不同。兩種系統有著截然不同的處理引擎。

完全有可能使一應用程式的一部分運行ASP, 而它的另一部分運行ASP.NET。 如果您需要從一個既龐大又變化非常快的網站逐步變為ASP.NET,這一點就顯得非常重要了。有人也許會認為一次性打包發布整個網站更好些。這對於Web應用的某些類型也許適用,但我想很多現有的網站,由於其規模巨大,結構複雜,網站內容與形式的革新迅速,而不適用此法。畢竟,如果您的網站有利可圖,投資方恐怕十有八九會不斷地讓您加入新功能,而使您沒法轉向這個新的熱門技術中去。另外,如果您打算全力轉向ASP.NET,並把它當成長期投資,您會想利用這個機會儘可能的改進結構與設計。在這些情況下,用漸進的方式實現共存是必需的。

相容性問題
把您的應用程式移植到ASP.NET也許並不容易;然而,也並不那麼難。ASP.NET與ASP相容性非常好。做到這點非常不容易,因為從ASP到ASP.NET是一場全新的變革。ASP.NET的設計者們原來計劃要做到100%與ASP相容,但最終為了長遠考慮,出於最佳化該平台的目的,不得不收回計劃。您不用擔心,所有的變化都是往好的方向發展,不會在您安裝時造成很大工作量。綜合實際發生的變化,可以分為以下幾項:
 

核心API 變化  
結構變化  
Visual Basic語言變化  
與COM 相關的變化  
應用程式配置的變化  
狀態管理問題  
涉及安全性問題  
資料訪問  

所有以上方面都會在下文中詳細討論。


核心API 變化

ASP的核心API由一些固有對象(Request, Response, Server, 等)及與它們相關的方法組成.除了一些簡單變化,這些API在ASP.NET下會繼續工作無誤.所有的變化都與Request 對象有關.請看錶一:

表1:API 變化

Request(item)
 在ASP中, 該方法會返回字串數組.在ASP .NET,它會返回NameValueCollection.  
Request.QueryString(item)
 在ASP中, 該方法會返回字串數組.在ASP .NET,它會返回NameValueCollection.  
Request.Form(item)
 在ASP中, 該方法會返回字串數組.在ASP .NET,它會返回NameValueCollection.  


可以看出, 這些變化對所有的方法都是一樣的。

如果,您要訪問的對象對某索引值有唯一值,您就不需要修改您的代碼。可是,如果有多個值,您就需要用不同的方法獲得它們。另外,請注意Visual Basic .NET中的集合是以零為基的,而VBScript的集合是以一為基的。

例如,在ASP中,訪問來自對http://localhost/myweb/valuetest.asp?values=10&values=20發出的請求的單獨查詢字元竄數值,可能會得到以下結果:

<%
'This will output "10"
Response.Write Request.QueryString("values")(1)

'This will output "20"
Response.Write Request.QueryString("values")(2)
%>


在ASP .NET中,QueryString屬性返回NameValueCollection對象。從此對象中,您可以獲得數值集合,及您想要的真正內容。再一次要強調的是:請注意集合中的第一項是基於零而不是一:

<%
'This will output "10"
Response.Write (Request.QueryString.GetValues("values")(0))

'This will output "20"
Response.Write (Request.QueryString.GetValues("values")(1))
%>

無論是ASP還是ASP.NET,以下代碼執行結果是一樣的:

<%
'This will output "10", "20"
Response.Write (Request.QueryString("values"))
%>
 
結構變化指的是那些影響Active Server Pages布局與代碼風格的變化。您必須對它們有所瞭解以確保您的代碼會在ASP.NET中運行無誤。


代碼塊: 聲明函數與變數

在ASP中,您可以在您的代碼標示符中聲明子程式與全域變數.

<%
Dim X
Dim str
Sub MySub()
Response.Write "This is a string."
End Sub  
%>
在ASP.NET中,這已被禁止。您必須在<script> 塊中聲明所有函數與變數。

<script language = "vb" runat = "server">
Dim str As String
Dim x, y As Integer

Function Add(I As Integer, J As Integer) As Integer
Return (I + J)
End Function
</script>


程式設計語言混合

在ASP程式設計語言中,您基本上有兩種選擇:VBScript 或 Microsoft® JScript®。 您可以在同一頁自由混合搭配指令碼塊。

在ASP.NET,您現在有三種選擇。您可以使用C#, Visual Basic .NET, 或 Jscript。請注意我說的是Visual Basic .NET 而不是VBScript。這是因為VBScript不存在於.NET 平台。它已經完全被Visual Basic .NET歸入。雖然您可以自由選擇任何語言,必須注意的是您不能再在同一頁任意混合不同語言。當然您可以在您的應用程式Page1.aspx中包含C#代碼,而Page2.aspx中包含Visual Basic .NET代碼。您所不能做的是把它們混合放在同一頁面。


新頁面指令

在ASP中,您必須把所有指示指令放在頁面的第一行, 而且只能在同一個代碼標誌符內。例如:
<%LANGUAGE="VBSCRIPT" CODEPAGE="932"%>
在ASP.NET中,您必須把語言指令與頁面指令放在一行。例如:
<%@Page Language="VB" CodePage="932"%>
<%@QutputCache Duration="60" VaryByParam="none" %>
您可以根據需要,加入任意多條指令。指令可以被放在您的.apsx檔案中的任何地方,但標準做法是置於檔案開頭。

ASP .NET納入了一些新的指令。我建議您在ASP.NET相關檔案中尋找更多資訊,看這些新指令是否能為您的應用程式帶來益處。


Render 函數不再有效
在ASP中,開發人員發現它們可以利用所謂“輸出函數”做些聰明的事。輸出函數是一種本文中嵌入著大量HTML的子程式。例如:
<%Sub RenderMe()
%>
<H3> This is HTML text being rendered. </H3>
<%End Sub
RenderMe
%>
雖然用這些函數可以做很多很酷的事情,該代碼在ASP.NET中不再允許使用,這應該是一種進步。我相信,在您像這樣開始混合或搭配代碼與HTML時,您見過有些函數很快就無法閱讀與管理了。讓它在ASP.NET中工作的最簡單方法是調用 Response.Write 去取代您的HTML 輸出。例如:

<script language="vb" runat="server">
Sub RenderMe()
Response.Write("<H3> This is HTML text being rendered. </H3>")
End Sub
</script>

<%
Call RenderMe()
%>

請注意我說了:“最簡單的方法”,這並不是說它是最好的方法。取決於您的輸出代碼的複雜程度與數量,使用自訂的Web controls可能對您有利。它使您可以用程式設定HTML 屬性,並真正把您的內容與代碼分開。這樣可以大大提高您的代碼可讀性。
 
正如我所提到過的,VBScript 已被更全面更強大的Visual Basic .NET所取代。在這部分,我會強調那些您可能會碰到的與Visual Basic語言變化相關的問題。請注意我並不會列出關於Visual Basic所有的變化,而只會著眼於一個由Visual Basic .NET轉向ASP .NET的ASP/VBScript 程式員可能會遇到的情況。欲知所有語言變化,請參考Visual Basic .NET相關文檔。


告別Variant資料類型

我們知道它,我們愛它,我們也恨它。我說的當然是VARIANT資料類型。VARIANT資料類型不是.NET的一部分,所以在Visual Basic .NET中也不支援它。這也就意味著您所有的ASP變數正在不知不覺地從VARIANT資料類型轉為物件類型。您的應用程式裡的大多變數應根據需要改為相應的基元類型。如果您的變數在Visual Basic術語中確實是物件類型,只需在ASP.NET中簡單聲明其為Object即可。


Visual Basic 資料類型

一種一定會引起特別關注的VARIANT是VT_DATE資料類型。在Visual Basic中它被表示為Date類型。在Visual Basic中,Date 是以4個位元組的雙位元組格式儲存的。在Visual Basic.NET中, Date使用Common Language Runtime DateTime 類型,用8個位元組整數來儲存。

既然在ASP中,所有變數都是VARIANT資料類型,您使用的Date變數會被編譯,也可能繼續工作(這取決於他們是如何被正確使用。)可是,您在使用這些變數時,也有可能會遇到各種各樣的問題,因為它們實際的資料類型已經改變。在把數值作為長整數類型送入COM對象或是對日期類型用CLng實施某些轉換操作時,尤要注意。


Option Explicit 現為預設

在ASP中,Option Explicit 沒有被規定為預設設定。Visual Basic .NET在這點上作了改變。Option Explicit成為預設值,因此,所有變數都需要聲明。如果更嚴格一些的話,可以把您的設定變為Option Strict,這樣可以迫使您聲明所有的變數為某種資料類型。雖然這看似冗餘,卻是您應該堅持的做法。如果您不這樣做,您的代碼遠遠不可能最佳化,因為所有未經聲明的變數會變成Object 類型。大多數隱性轉換仍會有效,但如果您聲明清楚所有變數的話,以後您就可以更安心了。


LET 與 SET不再被支援

對象可以像這樣直接賦值:MyObj1 = MyObj2。如果您的程式裡有SET 或LET 關鍵字, 它們必須被移掉。


用括弧實現方法調用

在ASP中,您無須使用括弧就可以自由調用對象的方法。例如:

Sub WriteData()
Response.Write "This is data"
End Sub
WriteData
在ASP .NET中, 做任何調用,您都必須使用括弧,即使是不使用任何參數的方法也是一樣。按照如下例所示方法書寫代碼,可以使代碼在ASP與 ASP.NET環境中都工作無誤。

Sub WriteData()
Response.Write("This is data")
End Sub
Call WriteData()


ByVal成為預設

在Visual Basic中,所有參數預設以引用(或ByRef)方式來傳遞。在Visual Basic .NET中有所改變。所有參數預設以值(或ByVal)傳遞。如果您仍然希望以引用來傳遞,您必須在參數之前清楚註明ByRef關鍵字。例如:

Sub MyByRefSub (ByRef Value)
Value = 53;
End Sub
這就是您必須非常小心的地方。當您將您的代碼轉向ASP.NET,我建議您對方法調用中的每個參數作兩次甚至三次的檢查,以確保這種變化確實符合您的期望。我估計,在檢查過程中,總會查出些錯誤。


不再有預設屬性

預設屬性的概念不再存在於Visual Basic .NET。 這也就意味著如果您有依賴於來自某對象的預設屬性的ASP代碼,您將需要加以修改,以顯式地引用所需屬性。請見下例:



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.