六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

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

遷移到 ASP .NET:需考慮的重要問題(1)

[摘要]簡介雖然 Microsoft® ASP .NET 的設計者在保持 ASP 應用程序的向后兼容性方面做了大量不懈的努力,但在將 Web 應用程序由 ASP 向 ASP .NET 遷移之前,還是應該了解一下幾個關鍵的問題。在 .NET 平臺和 ASP .NET 中對現有技術進行了改進并...
簡介
雖然 Microsoft® ASP .NET 的設計者在保持 ASP 應用程序的向后兼容性方面做了大量不懈的努力,但在將 Web 應用程序由 ASP 向 ASP .NET 遷移之前,還是應該了解一下幾個關鍵的問題。在 .NET 平臺和 ASP .NET 中對現有技術進行了改進并采用了一些新技術,透徹理解這些技術有利于簡化此遷移過程,但這需要經過一段漫長的時間。

本文探討各方面的變化,以便讓用戶清楚地了解建立 ASP 應用程序并使其在 ASP .NET 環境中運行所必須進行的一些工作。同時,它還指出了 ASP .NET 的一些新特性,用戶可以充分利用這些新特性改進現有的應用程序。但這決不是 ASP .NET 所有新特性的全面介紹,而只是著重探討一下成功遷移時需考慮的一些問題。

我設想,由于大多數 ASP 應用程序都使用 Microsoft® Visual Basic® Scripting Edition (VBScript),所以大多數用戶都會選擇使用 Visual Basic .NET 遷移到 ASP .NET。顯然,這不是必需的。但如果決定在遷移的同時更改語言,將需要進行一些額外的工作,而且很可能還會涉及到設計和結構方面的更改。

共存性
在討論具體的兼容性和遷移問題之前,了解一下 ASP 和 ASP .NET 如何共存非常重要。ASP 和 ASP .NET 應用程序可以同時在服務器上運行,而互不影響。這主要是由于兩種技術各自使用不同的文件擴展名(.asp 與 .aspx)和不同的配置模型(配置數據庫/注冊表與基于 XML 的配置文件)。這兩種系統還各自具有相應的處理引擎。

讓某個應用程序的一部分運行 ASP,而另一部分運行 ASP .NET,這是完全可能的。如果需要將一個快速發展的大型站點一次一小部分地遷移到 ASP .NET,這種特性將對您大有益處。某些用戶可能會說,最好能一次性遷移和部署整個站點。對于某些類型的 Web 應用程序來說也許是如此,但我認為,有許多站點并不能這樣:考慮到站點內容和外觀的絕對大小、復雜程度以及迅速變化,這種方式非常缺乏靈活性。畢竟,對于一個盈利的網站來說,那些掏腰包的人不可能允許您停止他們的新增功能,而將整個網站遷移到這種熱門的新技術。另外,如果把向 ASP .NET 遷移作為一項長期投資,您將希望利用此機會盡可能多地對結構和設計做一些改進。綜合這些情況,分階段的共存性遷移是絕對必要的。

兼容性問題
將應用程序向 ASP .NET 遷移可能不是一件容易的事情;但是,也不應該很困難。ASP .NET 與 ASP 的兼容性非常好,給用戶的感覺就好象 ASP .NET 是 ASP 的一個完整翻版。ASP .NET 設計者的最初目標是實現與 ASP 百分之百的向后兼容性,但在隨后的工作中,他們不得不改變了這一初衷,以便徹底地改進這一平臺。不過不要擔心,我們盡可能進行了大量改進,應該不會需要您進行太多的工作。所發生的實際變化可以歸納為下列幾類:

核心 API 的變化
結構變化
Visual Basic 語言的變化
與 COM 有關的變化
應用程序配置的變化
狀態管理問題
與安全性有關的變化
數據訪問
下面將詳細討論上述各個方面的變化。

核心 API 的變化
ASP 的核心 API 由幾個固有對象(Request、Response 和 Server 等)及其有關方法組成。除幾處簡單變化之外,這些 API 在 ASP .NET 下可以繼續正常運行。所有變化都與 Request 對象有關,如表 1 所示:

表 1:API 的變化

方法 變化
Request(item) 在 ASP 中,此方法返回字符串數組。在 ASP .NET 中,它返回 NameValueCollection。
Request.QueryString(item) 在 ASP 中,此方法返回字符串數組。在 ASP .NET 中,它返回 NameValueCollection。
Request.Form(item) 在 ASP 中,此方法返回字符串數組。在 ASP .NET 中,它返回 NameValueCollection。

正如您所見,對于涉及到的所有方法,其變化基本上都相同。

如果訪問的 item(項)只包含特定關鍵字的一個值,您將不必修改自己的代碼。但是,如果給定的關鍵字具有多個值,您將需要使用其它方法返回值的集合。另請注意,Visual Basic .NET 中的集合都是基于 0,而 VBScript 中的集合是基于 1 的。

例如,在 ASP 中,將按下列方式訪問 http://localhost/myweb/valuetest.asp?values=10&values=20 請求返回的各個查詢字符串值:

<%
'輸出“10”
Response.Write Request.QueryString("values")(1)

'輸出“20”
Response.Write Request.QueryString("values")(2)
%>

在 ASP .NET 中,QueryString 屬性返回 NameValueCollection 對象,在檢索所需的實際項之前,將需要從該對象中檢索 Values 集合。另外需要注意,集合中的第一項是使用 0 而非 1 索引進行檢索的:

<%
'輸出“10”
Response.Write (Request.QueryString.GetValues("values")(0))

'輸出“20”
Response.Write (Request.QueryString.GetValues("values")(1))
%>

下列代碼在 ASP 和 ASP .NET 中的運行結果相同:

<%
'輸出“10”和“20”
Response.Write (Request.QueryString("values"))
%>

結構變化
結構變化將影響 Active Server Pages 的布局和編碼樣式。您需要了解其中的一些信息,以確保您的代碼能夠在 ASP .NET 中運行。

代碼塊:聲明函數和變量
在 ASP 中,可以在代碼分隔符之間聲明子程序和全局變量。

<%
Dim X
Dim str
Sub MySub()
Response.Write "這是一個字符串。"
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&reg; JScript&reg;。在同一網頁中,您可以隨意組合和匹配各種腳本塊。

在 ASP .NET 中,目前有三種語言可供您選擇:C#、Visual Basic .NET 或 JScript。注意,我說的是 Visual Basic .NET,而不是 VBScript。這是因為 .NET 平臺上不存在 VBScript,它已被完全集成到 Visual Basic .NET 中。雖然可以自由選擇其中的任意一種語言,但需要注意的是,您不能像在 ASP 中那樣在同一網頁中使用多種語言。您的確可以在同一個應用程序的 Page1.aspx 中使用 C# 代碼,而在 Page2.aspx 中使用 Visual Basic .NET 代碼,只是您不能在同一頁中混用它們。

新增的 Page 指令
在 ASP 中,必須將所有指令置于網頁中同一分隔塊內的第一行。例如:

<%LANGUAGE="VBSCRIPT" CODEPAGE="932"%>

在 ASP .NET 中,需要將 Language 指令替換為 Page 指令,如下所示:

<%@Page Language="VB" CodePage="932"%>
<%@QutputCache Duration="60" VaryByParam="none" %>

可以根據需要包含任意多行指令。指令可以位于 .apsx 文件中的任意位置,但標準做法是將其置于文件的最開頭。

在 ASP .NET 中新增了幾個指令。我鼓勵您在 ASP .NET 文檔中查看一下這些指令,了解它們可以為您的應用程序帶來什么樣的好處。

生成函數不再有效
開發者指出,在 ASP 中,他們可以使用“生成函數”靈活處理一些問題。“生成函數”基本上是一個子程序,在其主體中嵌入了大量 HTML。例如:

<%Sub RenderMe()
%>
<H3> 這是正在生成的 HTML 文本。</H3>
<%End Sub
RenderMe
%>

雖然使用這類函數能夠實現非常酷的功能,但 ASP .NET 中不允許使用這類編碼。這可能是出于優化性能的考慮。我想您肯定遇到過,像這樣將代碼與 HTML 混在一起時,有些函數很快就變得可讀性極差,而且難以管理。在 ASP .NET 中,實現此目的的最簡單方法是調用 Response.Write 來代替 HTML 輸出,如下所示:

<script language="vb" runat="server">
Sub RenderMe()
Response.Write("<H3> 這是正在生成的 HTML 文本。</H3>")
End Sub
</script>

<%
Call RenderMe()
%>

注意,我說的是“最簡單的方法”,但并不一定表示是最佳方法。根據生成代碼的復雜程度和數量,使用自定義 Web 控件效果可能更好,這種控件允許您通過編程設置 HTML 屬性,并將代碼與內容真正分開,使代碼可讀性更強。

Visual Basic 語言的變化
正如我前面提到過的,VBScript 已集成到了更完整、功能更強大的 Visual Basic .NET 中。這一節,我將重點講述您可能會遇到的與 Visual Basic 語言變化有關的一些問題。但需注意,這并不是詳盡的 Visual Basic 變化列表。我只是著重講述作為一名 ASP/VBScript 程序員,在使用 Visual Basic .NET 向 ASP .NET 遷移時可能會遇到的一些問題。有關所有語言變化的詳盡列表,請參見 Visual Basic .NET 文檔。

告別 Variant 數據類型
我們熟悉它、喜歡它,對它又愛又恨。當然,我說的是 VARIANT 數據類型。.NET 中沒有 VARIANT,因此 Visual Basic .NET 不支持這種數據類型。這意味著,您的所有 ASP 變量將悄悄地由 VARIANT 類型更改為 Object 類型。根據需要,應用程序中使用的大量變量可以而且應該更改為相應的基元類型。如果您的變量實際上是 Visual Basic 中的 object 類型,則只需在 ASP .NET 中將其顯式聲明為 Object 類型。

Visual Basic Date 類型
值得特別注意的一種 VARIANT 類型是 VT_DATE,它在 Visual Basic 中以 Date 類型出現。在 Visual Basic 中,使用四個字節以 Double 格式存儲 Date。在 Visual Basic .NET 中,Date 使用公共語言運行庫 DateTime 類型,該類型使用八個字節整數表示。

由于 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 "這是數據"
End Sub
WriteData

在 ASP .NET 中,所有調用都必須使用括號,即使是調用不帶任何括號的方法。如下例所示編寫代碼,使其在 ASP 和 ASP .NET 中都可以正確運行。

Sub WriteData()
Response.Write("這是數據")
End Sub
Call WriteData()

ByVal 現在是默認值
在 Visual Basic 中,默認情況下,所有參數都通過引用或 ByRef 進行傳遞。在 Visual Basic .NET 中,情況有所不同。現在,默認情況下,所有參數都通過值或 ByVal 進行傳遞。如果仍要使用 ByRef,必須在參數前面顯式使用 ByRef 關鍵字,如下所示:

Sub MyByRefSub (ByRef Value)
Value = 53;
End Sub

這一點必須特別注意。向 ASP .NET 遷移代碼時,建議您仔細檢查方法調用中使用的每個參數,確保這種變化是您真正需要的。我想您可能需要更改其中的某些參數。

不再有默認屬性
在 Visual Basic .NET 中,不再存在默認屬性的概念。這就意味著,如果您的 ASP 代碼依賴于某個對象提供的默認屬性,則需要更改為顯式引用所需屬性,如下列代碼所示:

'ASP 語法(隱式檢索 Column Value 屬性)
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("TestDB")
Set RS = Conn.Execute("Select * from Products")
Response.Write RS("Name")

'ASP.NET 語法(顯示檢索 Column Value 屬性)
Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("TestDB")
RS = Conn.Execute("Select * from Products")
Response.Write (RS("Name").Value)

數據類型的變化
在 Visual Basic .NET 中,Integer 值現在是 32 位,Long 類型已變成 64 位。

從 ASP .NET 中調用 COM 對象方法時,或調用自定義 Visual Basic 組件中的 Microsoft&reg; Win32&reg; API 調用時,可能會出現問題。應特別注意需要的實際數據類型,確保傳遞或計算的值正確。

結構化異常處理
雖然人們所熟悉的 On Error Resume Next 和 On Error Goto 錯誤處理技術在 Visual Basic .NET 中仍可使用,但它們不再是進行錯誤處理的最佳方法。Visual Basic 現在具有一種完善的結構化異常處理方法,它使用 Try、Catch 和 Finally 關鍵字。如果可能,您應該遷移到這種新模式進行錯誤處理,因為它具有更強大、更一致的應用程序錯誤處理機制。





主站蜘蛛池模板: 五月天丁香在线 | 青草伊伊 | 青青青免费网站在线观看 | 日韩毛片一级 | 婷婷欧美| 速度与激情9全集免费观看 速度与激情9免费完整版高清 | 日韩欧美视频在线播放 | 在线亚洲观看 | 色综合久久中文字幕网 | 天天爽夜夜爽一区二区三区 | 天天干天天干天天天天天天爽 | 亚洲欧美91| 性色a v 一区 | 亚洲 欧美 日韩在线综合福利 | 天天躁日日2018躁狠狠躁 | 任我爽精品视频在线播放 | 色六月丁香 | 武则天一级淫片免费看 | 日本五级床片全部免费午夜 | 色吊丝最新永久免费观看网站 | 一级毛片一级毛片一级毛片一级毛片 | 亚洲高清视频在线观看 | 在线亚洲精品国产波多野结衣 | 欧美在线色视频 | 日本免费人做人一区在线观看 | 亚洲永久免费视频 | 欧美一级大片免费看 | 污视频在线 | 亚洲欧洲中文 | 婷婷狠狠五月天小说免费 | 亚洲另类电击调教在线观看 | 婷婷热| 天天影视色香欲性综合网网站 | 在线一区视频 | 亚洲人成在线观看男人自拍 | 日韩婷婷| 日韩黄色一级视频 | 日日夜夜天天操 | 中文字幕日韩在线一区国内 | 欧美亚洲不卡 | 天天射天天怕 |