乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      ASP 到 ASP.NET 的移植

       趨明 2012-02-20
      foci 的Blog - 悠云藍(lán)天
       
      作者:foci
      發(fā)表時間:
      2006-10-24 19:28:55
      更新時間:
      2007-08-02 00:07:36
      瀏覽:797次
      主題:電腦技術(shù)
      評論:0篇
      地址:220.194.27.*


      :::欄目:::
      移植概述

      安裝 ASP.NET 不會破壞現(xiàn)有的 ASP 應(yīng)用程序。它使用單獨的文件擴(kuò)展名(.aspx 而不是 .asp)、單獨的配置設(shè)置以及完全獨立的公共語言運行庫(Asp.dll 沒有修改)。ASP 頁和應(yīng)用程序可以繼續(xù)使用現(xiàn)有的 ASP 引擎,不會受 ASP.NET 的干擾。這表明,將現(xiàn)有應(yīng)用程序移植到 ASP.NET 的好處是巨大的。ASP.NET 輕松提供比傳統(tǒng) ASP 多許多倍的功能,而且將 ASP 應(yīng)用程序移動到新的平臺也提供了極大的改進(jìn)機(jī)會??梢岳玫男鹿δ馨ǎ?

      提高的性能和可縮放性
      網(wǎng)絡(luò)場支持和 XCopy 部署
      輸出緩存和自定義安全
      Web 窗體頁控件
      XML Web 服務(wù)基礎(chǔ)結(jié)構(gòu)
      ASP.NET 旨在幫助您保留在傳統(tǒng) ASP 和 COM 技術(shù)上的投資。您希望支持現(xiàn)有的 ASP 語法和語義,同時需要可以很好地持續(xù)到下一代 Internet 應(yīng)用程序開發(fā)的前瞻性平臺,而 ASP.NET 正是在這兩者間實現(xiàn)平衡。盡管 ASP.NET 保留 ASP 功能集的多數(shù)內(nèi)容,但如果平臺要發(fā)展,就不可能實現(xiàn)二者間的完全兼容,因此對以往的工作方式有一些改動。

      好的方面是您的 ASP 技能可以很容易轉(zhuǎn)換為 ASP.NET。僅存在少數(shù)差異,通常很容易解決。但是,將 ASP 應(yīng)用程序移植到 ASP.NET 確實需要做一些工作。相對簡單的頁可能不需更改即可移植,但較為復(fù)雜的應(yīng)用程序可能需要一些修改。以下各節(jié)描述這些更改,以及它們可能影響現(xiàn)有應(yīng)用程序代碼的方式。還說明了一些可以在 ASP.NET 中重用 ASP 和 COM 代碼的方法。

      語法和語義
      ASP.NET 與傳統(tǒng)的 ASP 在 API 方面完全兼容,但有以下三處不同:

      Request():ASP 返回字符串?dāng)?shù)組;ASP.NET 返回字符串。
      Request.QueryString():ASP 返回字符串?dāng)?shù)組;ASP.NET 返回字符串。
      Request.Form():ASP 返回字符串?dāng)?shù)組;ASP.NET 返回字符串。
      在 ASP 中,Request、Request.QueryString 和 Request.Form 集合從查找返回字符串?dāng)?shù)組。例如,在傳統(tǒng)的 ASP 中,按如下所示訪問從請求到 http://localhost/test/Test.asp?values=45&values=600 的查詢字符串值:

      <%
      ' Below line outputs: "45, 600"
      Response.Write Request.QueryString("values")

      ' Below line outputs: "45"
      Response.Write Request.QueryString("values")(1)
      %>

      在 ASP.NET 中,這些集合需要顯式方法來獲取數(shù)組訪問。這些數(shù)組現(xiàn)在也是從 0 開始索引。例如,在 ASP.NET 中,按如下所示訪問從請求到 http://localhost/test/Test.aspx?values=45&values=600 的查詢字符串值:

      <%
      // Below line outputs: "45, 600"
      Response.Write(Request.QueryString["values"]);

      // Below line outputs: "45"
      Response.Write(Request.QueryString.GetValues("values")[0]);
      %>

      <%
      ' Below line outputs: "45, 600"
      Response.Write(Request.QueryString("values"))

      ' Below line outputs: "45"
      Response.Write(Request.QueryString.GetValues("values")(0))
      %>

      <%
      // Below line outputs: "45, 600"
      Response.Write(Request.QueryString["values"]);

      // Below line outputs: "45"
      Response.Write(Request.QueryString.GetValues("values")[0]);
      %>


      C# VB JScript

      這些數(shù)組最常用于從多項選擇列表框 (<select multiple>) 傳遞窗體值或多個復(fù)選框具有相同名稱的情況。

      ASP.NET 和 ASP 之間的語義差異
      ASP.NET 頁與現(xiàn)有的 ASP 頁相比還有幾處語義變化。下列問題最有可能影響您:

      ASP.NET 頁僅支持單語言。
      ASP 允許在單頁上使用多種語言,這對腳本庫方案有用。由于 ASP.NET 的已編譯特性,它在一頁上僅支持單語言。然而,在單個應(yīng)用程序內(nèi)仍然可以有多個使用不同語言的頁。用戶控件還可以具有不同于包含它們的頁所使用的語言。這使您能夠在單頁內(nèi)集成用不同語言編寫的功能。這足以替代傳統(tǒng) ASP 應(yīng)用程序中普遍使用的多語言包含文件。

      ASP.NET 頁函數(shù)必須在 <script runat=server> 塊中聲明。
      在 ASP 中,頁函數(shù)可以在 <% %> 塊中聲明:

      <%
      Sub DoSomething()
      Response.Write "Hello World!"
      End Sub

      DoSomething
      %>

      在 ASP.NET 中,頁函數(shù)必須在 <script runat=server> 塊中聲明:

      <script language="C#" runat=server>

      void DoSomething() {
      Response.Write("Hello World!");
      }

      </script>

      <%
      DoSomething();
      %>

      <script language="VB" runat=server>

      Sub DoSomething()
      Response.Write ("Hello World!")
      End Sub

      </script>

      <%
      DoSomething()
      %>

      <script language="JScript" runat=server>

      function DoSomething() : void {
      Response.Write("Hello World!");
      }

      </script>

      <%
      DoSomething();
      %>


      C# VB JScript


      ASP.NET 不支持頁呈現(xiàn)函數(shù)。
      在 ASP 中,可以用 <% %> 塊聲明頁呈現(xiàn)函數(shù):

      <% Sub RenderSomething() %>
      <font color="red"> Here is the time: <%=Now %> </font>
      <% End Sub %>

      <%
      RenderSomething
      RenderSomething
      %>

      在 ASP.NET 中,這必須重寫:

      <script language="C#" runat=server>

      void RenderSomething() {
      Response.Write("<font color=red> ");
      Response.Write("Here is the time: " + DateTime.Now);
      }

      </script>

      <%
      RenderSomething();
      RenderSomething();
      %>

      <script language="VB" runat=server>

      Sub RenderSomething()
      Response.Write("<font color=red> ")
      Response.Write("Here is the time: " & Now)
      End Sub

      </script>

      <%
      RenderSomething()
      RenderSomething()
      %>

      <script language="JScript" runat=server>

      function RenderSomething() : void {
      Response.Write("<font color=red> ");
      Response.Write("Here is the time: " + DateTime.Now);
      }

      </script>

      <%
      RenderSomething();
      RenderSomething();
      %>


      C# VB JScript


      本節(jié)小結(jié)
      除了三處例外,ASP.NET 與傳統(tǒng)的 ASP 在 API 方面完全兼容。API 的變化是:Request()、Request.QueryString() 和 Request.Form() 現(xiàn)在都返回個別的字符串而不是字符串?dāng)?shù)組。
      ASP.NET 頁僅支持單語言。
      ASP.NET 頁函數(shù)必須在 <script runat=server> 塊中聲明。
      不支持頁呈現(xiàn)函數(shù)。

      語言兼容性
      ASP 中使用的 VBScript 與 ASP.NET 中使用的 Visual Basic .NET 語言之間的差別是到目前為止所有潛在移植問題中最廣泛的。在此發(fā)布版中,不僅 ASP.NET 從 VBScript 語言分離出來成為“真正的”Visual Basic,而且 Visual Basic 語言本身也經(jīng)歷了重大改變。這些改變旨在:

      通過將具有相似用途的語言功能集中在一起,使語言更具一致性。
      通過重新設(shè)計使 Visual Basic 不夠“基本”的功能來簡化語言。
      通過重新設(shè)計向程序員隱藏了太多重要細(xì)節(jié)的功能,提高可讀性和可維護(hù)性。
      通過執(zhí)行更好的做法(如類型安全編程)來提高可靠性。
      本節(jié)重點介紹開始使用新的 Visual Basic 語言時可能遇到的一些常見問題。

      不再使用 Set 和 Let,而是使用簡單的變量賦值。
      <%
      ' Old ASP syntax.
      Dim MyConn
      Set MyConn = Server.CreateObject("ADODB.Connection")

      ' New ASP.NET syntax.
      Dim MyConn
      MyConn = Server.CreateObject("ADODB.Connection")
      %>

      不再使用非索引默認(rèn)屬性。非索引默認(rèn)屬性使通常引用對象的表達(dá)式能夠轉(zhuǎn)而引用對象的默認(rèn)屬性。支持默認(rèn)屬性的令人遺憾的結(jié)果是使程序更難讀,因為表達(dá)式的含義取決于其上下文。在 Visual Basic .NET 中,非索引屬性必須始終在代碼中顯式指定。
      <%
      ' Old ASP syntax (retrieving recordset column value).
      Set MyConn = Server.CreateObject("ADODB.Connection")
      MyConn.Open("TestDB")
      Set RS = MyConn.Execute("Select * from Products")
      Response.Write RS("Name")

      ' New ASP.NET syntax (retrieving recordset column value).
      MyConn = Server.CreateObject("ADODB.Connection")
      MyConn.Open("TestDB")
      RS = MyConn.Execute("Select * from Products")
      Response.Write RS("Name").Value
      %>

      仍然支持索引默認(rèn)屬性:

      <%
      Dim RS As RecordSet

      ' This is allowed (indexed).
      RS.Fields(1).Value = RS.Fields(2).Value

      ' But these are not allowed (non-indexed).
      RS(1) = RS(2)
      RS(1).Value = RS(2).Value
      %>

      調(diào)用子例程現(xiàn)在需要使用括號。Visual Basic 現(xiàn)在支持與調(diào)用子例程和函數(shù)完全相同的語法。
      ' Note parentheses with Response.Write.
      Sub DoSomething()
      Response.Write("Hello World!")
      End Sub

      ' Note parenthesws with DoSomething.
      DoSomething()

      新默認(rèn)值是按值參數(shù)。 在 Visual Basic 6 中,如果用戶沒有在參數(shù)聲明中顯式指定 ByVal 或 ByRef,調(diào)用約定默認(rèn)為 ByRef。在新的 Visual Basic .NET 中,默認(rèn)值為 ByVal。這對常規(guī)參數(shù)(其默認(rèn)值通過顯式指定 ByRef 可重寫)和傳遞給 ParamArray 參數(shù)的參數(shù)(其默認(rèn)值不能重寫)都適用。但這已經(jīng)改變,因為比這常見得多的做法是將參數(shù)僅用于將值傳入過程,而不是改變傳入的變量。將默認(rèn)值更改為 ByVal 可提高性能并減少意外副作用的可能性。
      仍然可以通過顯式使用 ByRef 修飾符來使用按引用參數(shù):

      <script language="VB" runat=server>

      Sub DoSomething(ByRef value)
      value = 4343
      End Sub

      </script>

      <%
      Dim number = 55
      DoSomething (number)
      Response.Write ("Number: " & number)
      %>

      注意: Visual Basic 6 和 Visual Basic .NET 之間還存在其他許多差異。請參考語言文檔以獲取更多信息。
      本節(jié)小結(jié)
      ASP 中使用的 VBScript 與 ASP.NET 中使用的 Visual Basic .NET 語言之間的差別是到目前為止所有潛在移植問題中最廣泛的。做了更改以簡化語言并提高一致性、可讀性、可維護(hù)性和可靠性。
      Visual Basic .NET 中不再支持 Set 和 Let 賦值。改為使用標(biāo)準(zhǔn)的變量賦值。
      Visual Basic .NET 中不支持非索引默認(rèn)屬性。但仍然支持索引默認(rèn)屬性。
      在 Visual Basic .NET 中調(diào)用子例程時需要使用括號。
      新默認(rèn)值是按值參數(shù)。仍然可以通過顯式使用 ByRef 修飾符來使用按引用參數(shù)。

      COM 互操作性
      公共語言運行庫使 .NET 對象能夠無縫地與傳統(tǒng)的 COM 組件相互操作。ASP.NET 向開發(fā)人員公開熟悉的 Server.CreateObject(ProgId) API 以創(chuàng)建 COM 的晚期綁定引用。
      Dim myConn
      myConn = Server.CreateObject("ADODB.Connection");

      也可通過創(chuàng)建運行時可調(diào)用的包裝 (RCW)(該包裝優(yōu)化非托管代碼和托管代碼間的調(diào)用性能),使用早期綁定的傳統(tǒng) COM 組件。可使用 .NET 框架 SDK 中包含的 Tlbimp.exe 實用工具創(chuàng)建 RCW。有關(guān) Tlbimp.exe 的更多信息,請參閱“常見任務(wù)入門”互操作性一節(jié)。ASP.NET 性能一節(jié)包含有關(guān)比較晚期綁定與早期綁定的更多信息。
      同 ASP 一樣,也可以使用具有 progid 或 classid 屬性的 <object> 標(biāo)記來創(chuàng)建傳統(tǒng)的 COM 組件。除了可以在頁中使用 <object> 標(biāo)記外,還可以在應(yīng)用程序的 Global.asax 文件中使用該標(biāo)記。在這種情況下,將對象添加到 Page.Application.StaticObjects 集合,并且只需使用它的 id 屬性便可以編程方式訪問它。注意,不能以靜態(tài)方式在 Global.asax 文件中創(chuàng)建單線程單元 (STA) 對象,因為這樣做會像在 ASP 中那樣發(fā)生運行時錯誤。

      此外,ASP.NET 繼續(xù)支持現(xiàn)有的 ASP 內(nèi)部接口 ObjectContext Intrinsic Flow、OnStartPage 和 OnEndPage。支持這些接口意味著可以在 ASP.NET 頁中使用現(xiàn)有組件(Commerce Server、Exchange 等等)。默認(rèn)情況下不啟用這些接口,但可通過下列頁指令顯式打開它們:

      <%@ Page ASPCompat="true" %>

      該指令使 ASP.NET 創(chuàng)建非托管的 ASP 內(nèi)部對象并將它們傳遞到頁中使用的 COM 組件。它還在 STA 線程池中運行頁。有關(guān)信息,請參閱下節(jié)。

      性能注意事項
      在 ASP.NET 中,默認(rèn)情況下線程池是多線程單元 (MTA) 模式,這會影響傳統(tǒng)的單元線程 Visual Basic 5 和 Visual Basic 6 組件的性能。ASPCompat="true" 屬性使 STA 線程池能夠基于每頁解決現(xiàn)有 Visual Basic 組件的性能問題。
      在托管和非托管組件之間調(diào)用同樣會引起封送開銷,這將降低頁的性能。每種方案都會產(chǎn)生不同的性能特點,因此在決定互操作性對應(yīng)用程序是否合適時進(jìn)行充分地測試是重要的。然而,幾乎在所有方案中,重寫托管代碼中的 COM 組件都會帶來性能收益。有關(guān)更多信息和重要提示,請參閱 ASP.NET 性能一節(jié)。

      本節(jié)小結(jié)
      ASP.NET 向開發(fā)人員公開熟悉的 Server.CreateObject API 以創(chuàng)建 COM 的晚期綁定引用。
      也可通過創(chuàng)建運行時可調(diào)用的包裝 (RCW)(該包裝優(yōu)化非托管代碼和托管代碼間的調(diào)用性能),使用早期綁定的傳統(tǒng) COM 組件。
      ASP.NET 繼續(xù)支持現(xiàn)有的 ASP 內(nèi)部接口 ObjectContext Intrinsic Flow、OnStartPage 和 OnEndPage。這些接口通過頁指令 <%@ Page ASPCompat="true" %> 顯式啟用。
      ASPCompat="true" 屬性使 STA 線程池能夠基于每頁解決現(xiàn)有 Visual Basic 組件的性能問題。
      幾乎在所有方案中,重寫托管代碼中的 COM 組件都會提供性能收益。

      MTS 事務(wù)
      事務(wù)是以邏輯單元的形式成功或失敗的一個或一組操作。一個典型的事務(wù)例子是將資金從一個銀行帳戶轉(zhuǎn)移到另一個帳戶。此例中,必須將資金從第一個帳戶借記出來,并貸記到第二個帳戶,這樣方可認(rèn)為操作成功。如果資金被成功地借記但沒有被貸記,則必須撤銷第一個帳戶上的借記,以使兩個帳戶都正確并一致。
      一般通過聲明一組操作的邊界來管理事務(wù)。在事務(wù)邊界的上下文中執(zhí)行的操作于是以單元的形式成功或失敗。對于 ASP.NET,事務(wù)邊界是執(zhí)行對頁的單個請求,而該頁可能包含參與同一事務(wù)的嵌套組件。在頁執(zhí)行期間,如果頁本身上的操作或同一事務(wù)中的嵌套組件失敗,它可以調(diào)用 ContextUtil.SetAbort。它隨后由當(dāng)前的事務(wù)上下文獲取,整個事務(wù)失敗,并撤消任何已完成的操作。如果未發(fā)生失敗,則提交事務(wù)。

      ASP.NET 事務(wù)支持由允許頁參與正在進(jìn)行的 Microsoft .NET 框架事務(wù)的能力組成。事務(wù)支持通過指示所需支持級別的 @Transaction 指令公開:

      <%@ Transaction="Required" %>

      下表定義了受支持的事務(wù)屬性。 缺少事務(wù)指令與“Disabled”的顯式指令相同。與 ASP 不同,ASP.NET 沒有對應(yīng)于 none 的顯式指令(即 Transaction="None")。

      屬性 說明
      Required 頁要求事務(wù)。如果存在現(xiàn)有事務(wù),它在此事務(wù)的上下文中運行。否則將啟動一個事務(wù)。
      RequiresNew 頁要求事務(wù),并為每個請求啟動一個新的事務(wù)。
      Supported 如果存在現(xiàn)有事務(wù),頁在此事務(wù)的上下文中運行。否則將在無事務(wù)的情況下運行。
      NotSupported 頁不在事務(wù)范圍內(nèi)運行。處理請求時,無論是否存在活動事務(wù),其對象上下文都在無事務(wù)的情況下創(chuàng)建。

      可使用 System.EnterpriseServices.ContextUtil 類的靜態(tài)方法顯式提交或中止事務(wù)??娠@式調(diào)用 SetComplete 或 SetAbort 方法提交或中止進(jìn)行中的事務(wù)。

      注意:假設(shè)沒有其他對象與同一事務(wù)聯(lián)接,則事務(wù)將在頁的生存期結(jié)束時提交或中止,具體取決于最后調(diào)用的是 SetComplete 還是 SetAbort。

      // Try to do something crucial to transaction completing.
      if (!DoSomeWork()) {
      ContextUtil.SetAbort();
      }

      ' Try to do something crucial to transaction completing.
      If (Not DoSomeWork())
      ContextUtil.SetAbort()
      End If

      // Try to do something crucial to transaction completing.
      if (!DoSomeWork()) {
      ContextUtil.SetAbort();
      }


      C# VB JScript

      本節(jié)小結(jié)
      事務(wù)是以邏輯單元的形式成功或失敗的一個或一組操作。
      ASP.NET 事務(wù)支持由允許頁參與正在進(jìn)行的 Microsoft .NET 框架事務(wù)的能力組成。事務(wù)支持通過指示所需支持級別的 @Transaction 指令公開。
      可使用 System.EnterpriseServices.ContextUtil 類的靜態(tài)方法顯式提交或中止事務(wù)。開發(fā)人員可顯式調(diào)用 SetComplete 或 SetAbort 方法來提交或中止進(jìn)行中的事務(wù)。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多