?? page13.htm
字號:
處理事務的一致性。事務處理只適用于數據庫訪問;MTS
不能對文件系統或其他的非事務性資源的更改進行恢復操作。應用程序所訪問的數據庫必須為
MTS 所支持。目前,MTS 支持 SQL Server 及任何支持 XA 協議(由 X/Open
協會制定)的服務器。MTS 將繼續擴展對其他數據庫的支持。</p>
<p>事務不能跨越多個 ASP
頁。如果一個事務需要來自多個組件的對象,則須將使用這些對象的操作組合在一個
ASP
頁中。例如,假定有一個組件用于更新工資單數據庫,還有一個組件用于更新人力資源數據庫中的員工記錄。為了記錄一個員工的新的工資信息,您需要編寫這樣一個腳本,該腳本在一個事務環境中調用這兩個組件,一個用于更新工資單數據庫,另一個用于更新人力資源數據庫中的員工等級。</p>
<p><strong>聲明事務性腳本</strong></p>
<p>在將一個頁聲明為事務性時,此頁中的任何腳本命令和對象都運行在同一個事務環境中。Transaction
Server
處理生成事務的細節并決定事務成功(提交)或失敗(終止)。要將某個頁聲明為事務性,可在頁首添加
@TRANSACTION 指令:</p>
<p><%@ TRANSACTION = value %></p>
<p>value 參數可以是下列之一:</p>
<p>值 意義 </p>
<p>Requires_New 啟動一個新的事務。 </p>
<p>Required 啟動一個新的事務。 </p>
<p>Supported 不啟動事務。 </p>
<p>Not_Supported 不啟動事務。 </p>
<p>@TRANSACTION
指令必須在一頁中的第一行,否則將產生錯誤。必須將該指令添加到需要在事務下運行的每一頁中。當腳本處理結束時,當前事務即告結束。</p>
<p>大多數應用程序只有一些特定的操作需要事務環境。例如,一個航空公司的站點可能只需要事務性腳本處理購票和安排座位,而其他所有腳本則無須事務環境即可安全運行。因為事務只須用于需要事務處理的頁即可,不要將應用程序的
Global.asa 文件聲明為事務性。</p>
<p>如果事務被終止,Transaction Server
將恢復對支持事務的資源的任何更改。目前,僅數據庫服務器完全支持事務,因為數據庫中的數據對于企業應用是最為關鍵的。Transaction
Server
不對硬盤上的文件、會話和應用程序的變量、集合等的改變進行恢復。然而您可以如下文主題所述,通過編寫事務事件來編寫恢復變量和集合的腳本。在某些時候,您的腳本也可以顯式的提交或終止一個事務,如向文件寫數據失敗時。</p>
<p><strong>提交或終止腳本</strong></p>
<p>因為 Transaction Server
跟蹤事務處理,所以它決定事務是完全成功還是失敗。腳本可以通過調用
ObjectContext.SetAbort 顯式地聲明終止一個事務。
例如,當一個事務在從一個組件收到錯誤消息、違反商業規范時(例如,帳戶余額小于
0)或讀寫文件等非事務性操作失敗時,腳本就需要終止該事務。如果頁在事務完成之前超時,也必須終止事務。</p>
<p><strong>編寫事務事件</strong></p>
<p>腳本本身不能決定事務是成功還是失敗。但是,可以編寫提交或終止事務時被調用的事件。例如,假設有一個確認銀行帳戶的腳本,并且您需要針對事務的不同狀態將不同的頁返回給用戶,那么就可以使用
OnTransactionCommit 和 OnTransactionAbort 事件來編寫對用戶的不同響應。</p>
<p><%@ TRANSACTION = Required %></p>
<p><%</p>
<p>'Buffer output so that different pages can be displayed.</p>
<p>Response.Buffer = True</p>
<p>%></p>
<p><HTML></p>
<p><BODY></p>
<p><H1>Welcome to the online banking service</H1></p>
<p> </p>
<p><%</p>
<p>Set BankAction = Server.CreateObject("MyExample.BankComponent")</p>
<p>BankAction.Deposit(Request("AcctNum"))</p>
<p>%></p>
<p><P>Thank you. Your transaction is being processed.</P></p>
<p></BODY></p>
<p></HTML></p>
<p><%</p>
<p>' Display this page if the transaction succeeds.</p>
<p>Sub OnTransactionCommit()</p>
<p>Response.Write "<HTML>"</p>
<p>Response.Write "<BODY>"</p>
<p>Response.Write "Thank you. Your account has been credited."</p>
<p>Response.Write "</BODY>"</p>
<p>Response.Write "</HTML>"</p>
<p>Response.Flush()</p>
<p>end sub</p>
<p>%></p>
<p><%</p>
<p>' Display this page if the transaction fails.</p>
<p>Sub OnTransactionAbort()</p>
<p>Response.Clear()</p>
<p>Response.Write "<HTML>"</p>
<p>Response.Write "<BODY>"</p>
<p>Response.Write "We are unable to complete your transaction."</p>
<p>Response.Write "</BODY>"</p>
<p>Response.Write "</HTML>"</p>
<p>Response.Flush()</p>
<p>End sub</p>
<p>%></p>
<p><strong>在 MTS 資源管理器中登記一個組件</strong></p>
<p>為了參與一個事務,組件必須在 MTS
包中登記,而且必須被配置為需要事務。例如,如果您的腳本是通過調用兩個組件來處理訂單的,一個更新庫存數據庫,另一個更新付款數據庫。那么,這兩個組件就要在同一個事務環境中運行。Transaction
Server
保證如果任意一個組件失敗,那么將不會有數據庫被更新。某些組件不需要事務;例如,Ad
Rotator 組件。</p>
<p>注冊和配置事務性組件可使用 MTS
資源管理器。必須將事務的屬性設置為需要事務或需要新事務。事務組件必須在
MTS 包中注冊。不要將組件放在 IIS
內部進程包中,而應該創建自己的包。通常,應將所有的組件放在一個組件庫中。組件庫的組件可被多個
ASP 應用程序使用并以 ASP 應用程序進程運行。使用 MTS
資源管理器可創建新的包并將包的 Activation 屬性設置為 Library。</p>
<p>也可以在 Server 包中注冊事務性組件。Server
包通常以服務器上的一個獨立的進程運行。如果希望使用基于職能組的安全性檢查或希望您的組件可被遠程計算機上的應用程序訪問,可對事務性組件使用
Server 包。</p>
<p>要使用 MTS 資源管理器,必須安裝 Microsoft Transaction Server。有關注冊組件和選擇包類型的詳細信息,請參閱
創建 MTS 包。</p>
<p><strong>對象作用域</strong></p>
<p>一般情況下,不要將從 MTS 組件中創建的對象存儲在 ASP Application
或 Session 對象中。 MTS 對象在事務完成后消失。因為 Session 對象和
Application 對象是為在不同 ASP
頁之間使用的對象實例設計的,所以不要用它們保存在事務結束時即被釋放的對象。</p>
<p>ASP 腳本是已聲名的事務的根,即起始點。任何事務性 ASP
頁所使用的 MTS
對象都被認為是事務的一部分。當事務完成后,在頁中使用的 MTS
對象將消失,其中包括存儲在 Session 或 Application
對象中的對象。在此之后,從另一個事務性頁中調用會話作用域或應用程序作用域對象的嘗試都將失敗。</p>
<p><strong>事務排隊</strong></p>
<p>從一個遠程服務器對數據庫的更新可能因為網絡延遲或故障而導致事務延遲或終止。因為事務的所有部分都必須提交,所以應用程序將可能掛起,等待遠程服務器的提交或終止消息,也可能由于無法發送數據庫更新而導致事務被放棄。</p>
<p>對于必須同時完成的更新,正確的做法是在事務的所有參與者都能夠提交之前,終止事務或推遲完成事務。例如,航空公司的定票程序應該同時完成對客戶的銀行帳號計入借方和對航空公司的銀行帳戶計入貸方。如果一個更新屬于事務整體的一部分,但可能晚于其他更新,您可能不希望讓客戶等待整個更新過程的完成。例如,機票預定事務可能也要向食品供應商發送食品訂單或更新客戶的旅程津貼。這些操作雖然也必須完成,但可以晚一些。</p>
<p>Microsoft Message Queue Server
使您能夠將一個或一組更新捆綁到一個事務性消息中送給遠程服務器。Message
Queue Server
保證更新將被發送給遠程服務器,即使目前網絡不可用。您的應用將收到一個提交消息,從而可以繼續處理事務。</p>
<p>有關在 ASP 應用程序中使用消息隊列的示例,請參閱
開發人員范例。要查看這些示例,必須安裝 SDK 文檔。</p>
<p>有關 Microsoft Message Queue Server 的詳細信息,請參閱 Microsoft Message
Queue Server。</p>
<p> </p>
<p>--------------------------------------------------------------------------------</p>
<p><strong>模塊 1:創建 ASP 頁</strong></p>
<p>請選擇本課的腳本語言</p>
<p>在本模塊中,通過創建自己的 ASP 頁(.asp 文件),您將學習一些
ASP 的基本知識。在這些課程中用到的示例文件,可以在 localhost Web
服務器的 Tutorial 目錄 (C:\WINNT\Help\iis\htm\tutorial)
中找到。請將您創建的文件也保存到 Tutorial 目錄中。</p>
<p>要點 要保存并查看您在本模塊中的工作結果,必須在 localhost Web
服務器上對 /iishelp/iis/htm/tutorial 虛擬目錄具有“寫 (Write)”和“改編
Web 服務器 (Script Web server)”權限,當然必須已經安裝了 Active Server
Pages。詳細信息,請參閱 設置 Web 服務器權限。</font></p>
<layer src="http://www.spidersoft.com/ads/bwz468_60.htm" visibility=hidden id=a1 width=600 onload="moveToAbsolute(ad1.pageX,ad1.pageY); a1.clip.height=60;visibility='show';"></layer>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -