国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET移植須知

2024-07-10 12:58:31
字體:
來源:轉載
供稿:網友
菜鳥學堂:
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代碼,您將需要加以修改,以顯式地引用所需屬性。請見下例:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿克陶县| 泸州市| 昆山市| 凌海市| 苗栗市| 康定县| 平果县| 青海省| 厦门市| 南江县| 永定县| 永嘉县| 汝州市| 蕉岭县| 平邑县| 文安县| 且末县| 洛川县| 汝南县| 星座| 山东省| 高碑店市| 娄底市| 台中县| 肇东市| 周口市| 肥东县| 集贤县| 新绛县| 定日县| 平远县| 金阳县| 江川县| 华阴市| 南宁市| 西峡县| 承德县| 周宁县| 饶河县| 娱乐| 呼玛县|