將ASP代碼移植到ASP .Net
開發組希望在移植這個Web站點的過程中,能盡可能地少寫代碼,以減少產生漏洞的可能。在這部分,我將向你說明將ASP頁面移植到ASP .NET最簡單的方法是什麼。但使用這種方法不能充分利用ASP .NET的新特點,只能建立一個能在ASP .Net下運行的站點。
許多頁面需要做三四個標准的修改後才能正確運行。最常見的修改是要刪除Set關鍵字。.Net框架和底層的common language runtime (CLR)把任何東西都當作對象處理,所以刪除了Set這個關鍵字。下面這段代碼取自原先的站點:
'create the feedback object
set oFeedback = Server.CreateObject("BetaSiteMgr.Feedback")
應該改為 :
'create the feedback object
oFeedback = Server.CreateObject("BetaSiteMgr.Feedback")
另一個常見的改動是,在ASP頁中引用一個對象時,要明確指定這個對象的默認屬性。CLR和ASP .Net不再支持不傳遞參數的默認屬性。不幸的是,盡管明確指定屬性的值可以增加代碼的可讀性和可持續性,許多開發者更願意利用默認屬性的特點而不打出值。在這個Web站點中,當需要使用ADO記錄時,默認屬性經常被使用。原來的ASP代碼像這樣:
'set rs fIElds
rsLameError("BetaID") = Request.Form("betaid")
rsLameError("UserDescription") = Request.Form("bugDescription")
rsLameError("SeverityID") = Request.Form("severity")
應改為:
'set rs fIElds
rsLameError("BetaID").Value=Request.Form("betaid")
rsLameError("UserDescription").Value=Request.Form("bugDescription")
rsLameError("SeverityID").Value=Request.Form("severity")
第三種常見的修改是改變類型轉換函數的使用方式。再ASP .NET中,VBScript的類型轉換函數被加到了.Net框架中。這個變化要求下面的ASP代碼
adoRS.fIElds("AreaID") = clng(oUploadManager.Form("cboArea"))
adoRS.fIElds("SubAreaID") = clng(oUploadManager.Form("cboSubArea"))
轉變為:
adoRS.fIElds("AreaID").Value =
oUploadManager.Form("cboArea").ToString().ToInt()
adoRS.fIElds("SubAreaID").Value =
oUploadManager.Form("cboSubArea").ToString().ToInt()
最後一個常見的修改是將調用Response.Write方法的格式改為ASP .NET中的方法調用格式。在VBScript,調用不返回值的過程時,不需要用小括號把參數括起來。但在ASP .NET中,所有傳遞到方法中的參數都要用括號括起來。在原來的站點中,在很多地方都調用了Response對象的Write方法,而且都沒加小括號。為了將站點移植到ASP .Net,有必要將下面這段代碼:
<% Response.Write "Thank You!" %>
改為:
<% Response.Write("Thank You!") %>
在對原來的ASP頁面做了這些修改之後,這個Web站點就可以運行在ASP .NET下了。移植工作只要用兩周就可以完成了。為了知道什麼地方需要作修改,開發組應用Visual Studio .NET IDE新建了一個新的Visual Basic Web應用程序,將現存的ASP文件的擴展名都改為.ASPx,並把它們加到工程中。一旦頁面在IDE中顯示了出來,Visual Studio .Net就高亮顯示出語法,列出要作修改的地方,幫助我們這樣發現編譯期錯誤。