創(chuàng)建事務(wù)性腳本 (用mts管理事務(wù)、組件)
發(fā)表時間:2024-01-31 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]商業(yè)應(yīng)用程序常常需要具有在事務(wù)內(nèi)部運行腳本和組件的能力。事務(wù)是一種服務(wù)器操作,即使該操作包括很多步驟(例如,定貨、查看存貨、付帳等),也只能整體返回操作是成功還是失敗。用戶可以創(chuàng)建在事務(wù)內(nèi)部運行的 ASP 腳本,如果腳本的任何一部分失敗,整個事務(wù)都將會終止。 ASP 事務(wù)處理是以 Microsof...
商業(yè)應(yīng)用程序常常需要具有在事務(wù)內(nèi)部運行腳本和組件的能力。事務(wù)是一種服務(wù)器操作,即使該操作包括很多步驟(例如,定貨、查看存貨、付帳等),也只能整體返回操作是成功還是失敗。用戶可以創(chuàng)建在事務(wù)內(nèi)部運行的 ASP 腳本,如果腳本的任何一部分失敗,整個事務(wù)都將會終止。
ASP 事務(wù)處理是以 Microsoft Transaction Server (MTS) 為基礎(chǔ)的。Microsoft Transaction Server (MTS) 是一個事務(wù)處理系統(tǒng),用于開發(fā)、配置和管理高性能、可分級的、有魯棒性的企業(yè) Internet 和 Intranet 服務(wù)器應(yīng)用程序。Transaction Server 為開發(fā)分布式的,基于組件的應(yīng)用程序提供了一個應(yīng)用程序設(shè)計模型。它也為配置和管理這些應(yīng)用程序提供了一個運行環(huán)境。
創(chuàng)建事務(wù)性腳本的功能內(nèi)置在 Internet Information Server 和 Personal Web Server 中。如果您安裝了 Microsoft Transaction Server,就可以將組件打包,以使組件在事務(wù)內(nèi)部運行。
關(guān)于事務(wù)
事務(wù)是整體成功或失敗的操作。事務(wù)處理用于對數(shù)據(jù)庫進行可靠地更新。在對數(shù)據(jù)庫進行許多相關(guān)更改或同時更新多個數(shù)據(jù)庫時,要保證所有更改都被正確執(zhí)行。如果這些更改中的任何一個失敗,都需要恢復(fù)數(shù)據(jù)庫表的原始狀態(tài)。
如果沒有 MTS,您就需要編寫腳本和組件,手工跟蹤請求的更改情況,以便在某些更改失敗時恢復(fù)數(shù)據(jù)。使用 MTS,您只需簡單的將您的腳本和組件聲明為“需要事務(wù)”并讓 MTS 處理事務(wù)的一致性。事務(wù)處理只適用于數(shù)據(jù)庫訪問;MTS 不能對文件系統(tǒng)或其他的非事務(wù)性資源的更改進行恢復(fù)操作。應(yīng)用程序所訪問的數(shù)據(jù)庫必須為 MTS 所支持。目前,MTS 支持 SQL Server 及任何支持 XA 協(xié)議(由 X/Open 協(xié)會制定)的服務(wù)器。MTS 將繼續(xù)擴展對其他數(shù)據(jù)庫的支持。
事務(wù)不能跨越多個 ASP 頁。如果一個事務(wù)需要來自多個組件的對象,則須將使用這些對象的操作組合在一個 ASP 頁中。例如,假定有一個組件用于更新工資單數(shù)據(jù)庫,還有一個組件用于更新人力資源數(shù)據(jù)庫中的員工記錄。為了記錄一個員工的新的工資信息,您需要編寫這樣一個腳本,該腳本在一個事務(wù)環(huán)境中調(diào)用這兩個組件,一個用于更新工資單數(shù)據(jù)庫,另一個用于更新人力資源數(shù)據(jù)庫中的員工等級。
聲明事務(wù)性腳本
在將一個頁聲明為事務(wù)性時,此頁中的任何腳本命令和對象都運行在同一個事務(wù)環(huán)境中。Transaction Server 處理生成事務(wù)的細節(jié)并決定事務(wù)成功(提交)或失�。ńK止)。要將某個頁聲明為事務(wù)性,可在頁首添加 @TRANSACTION 指令:
value 參數(shù)可以是下列之一:
值 意義
Requires_New 啟動一個新的事務(wù)。
Required 啟動一個新的事務(wù)。
Supported 不啟動事務(wù)。
Not_Supported 不啟動事務(wù)。
@TRANSACTION 指令必須在一頁中的第一行,否則將產(chǎn)生錯誤。必須將該指令添加到需要在事務(wù)下運行的每一頁中。當(dāng)腳本處理結(jié)束時,當(dāng)前事務(wù)即告結(jié)束。
大多數(shù)應(yīng)用程序只有一些特定的操作需要事務(wù)環(huán)境。例如,一個航空公司的站點可能只需要事務(wù)性腳本處理購票和安排座位,而其他所有腳本則無須事務(wù)環(huán)境即可安全運行。因為事務(wù)只須用于需要事務(wù)處理的頁即可,不要將應(yīng)用程序的 Global.asa 文件聲明為事務(wù)性。
如果事務(wù)被終止,Transaction Server 將恢復(fù)對支持事務(wù)的資源的任何更改。目前,僅數(shù)據(jù)庫服務(wù)器完全支持事務(wù),因為數(shù)據(jù)庫中的數(shù)據(jù)對于企業(yè)應(yīng)用是最為關(guān)鍵的。Transaction Server 不對硬盤上的文件、會話和應(yīng)用程序的變量、集合等的改變進行恢復(fù)。然而您可以如下文主題所述,通過編寫事務(wù)事件來編寫恢復(fù)變量和集合的腳本。在某些時候,您的腳本也可以顯式的提交或終止一個事務(wù),如向文件寫數(shù)據(jù)失敗時。
提交或終止腳本
因為 Transaction Server 跟蹤事務(wù)處理,所以它決定事務(wù)是完全成功還是失敗。腳本可以通過調(diào)用 ObjectContext.SetAbort 顯式地聲明終止一個事務(wù)。 例如,當(dāng)一個事務(wù)在從一個組件收到錯誤消息、違反商業(yè)規(guī)范時(例如,帳戶余額小于 0)或讀寫文件等非事務(wù)性操作失敗時,腳本就需要終止該事務(wù)。如果頁在事務(wù)完成之前超時,也必須終止事務(wù)。
編寫事務(wù)事件
腳本本身不能決定事務(wù)是成功還是失敗。但是,可以編寫提交或終止事務(wù)時被調(diào)用的事件。例如,假設(shè)有一個確認銀行帳戶的腳本,并且您需要針對事務(wù)的不同狀態(tài)將不同的頁返回給用戶,那么就可以使用 OnTransactionCommit 和 OnTransactionAbort 事件來編寫對用戶的不同響應(yīng)。
Welcome to the online banking service
Thank you. Your transaction is being processed.
在 MTS 資源管理器中登記一個組件
為了參與一個事務(wù),組件必須在 MTS 包中登記,而且必須被配置為需要事務(wù)。例如,如果您的腳本是通過調(diào)用兩個組件來處理訂單的,一個更新庫存數(shù)據(jù)庫,另一個更新付款數(shù)據(jù)庫。那么,這兩個組件就要在同一個事務(wù)環(huán)境中運行。Transaction Server 保證如果任意一個組件失敗,那么將不會有數(shù)據(jù)庫被更新。某些組件不需要事務(wù);例如,Ad Rotator 組件。
注冊和配置事務(wù)性組件可使用 MTS 資源管理器。必須將事務(wù)的屬性設(shè)置為需要事務(wù)或需要新事務(wù)。事務(wù)組件必須在 MTS 包中注冊。不要將組件放在 IIS 內(nèi)部進程包中,而應(yīng)該創(chuàng)建自己的包。通常,應(yīng)將所有的組件放在一個組件庫中。組件庫的組件可被多個 ASP 應(yīng)用程序使用并以 ASP 應(yīng)用程序進程運行。使用 MTS 資源管理器可創(chuàng)建新的包并將包的 Activation 屬性設(shè)置為 Library。
也可以在 Server 包中注冊事務(wù)性組件。Server 包通常以服務(wù)器上的一個獨立的進程運行。如果希望使用基于職能組的安全性檢查或希望您的組件可被遠程計算機上的應(yīng)用程序訪問,可對事務(wù)性組件使用 Server 包。
要使用 MTS 資源管理器,必須安裝 Microsoft Transaction Server。
對象作用域
一般情況下,不要將從 MTS 組件中創(chuàng)建的對象存儲在 ASP Application 或 Session 對象中。 MTS 對象在事務(wù)完成后消失。因為 Session 對象和 Application 對象是為在不同 ASP 頁之間使用的對象實例設(shè)計的,所以不要用它們保存在事務(wù)結(jié)束時即被釋放的對象。
ASP 腳本是已聲名的事務(wù)的根,即起始點。任何事務(wù)性 ASP 頁所使用的 MTS 對象都被認為是事務(wù)的一部分。當(dāng)事務(wù)完成后,在頁中使用的 MTS 對象將消失,其中包括存儲在 Session 或 Application 對象中的對象。在此之后,從另一個事務(wù)性頁中調(diào)用會話作用域或應(yīng)用程序作用域?qū)ο蟮膰L試都將失敗。
事務(wù)排隊
從一個遠程服務(wù)器對數(shù)據(jù)庫的更新可能因為網(wǎng)絡(luò)延遲或故障而導(dǎo)致事務(wù)延遲或終止。因為事務(wù)的所有部分都必須提交,所以應(yīng)用程序?qū)⒖赡軖炱�,等待遠程服務(wù)器的提交或終止消息,也可能由于無法發(fā)送數(shù)據(jù)庫更新而導(dǎo)致事務(wù)被放棄。
對于必須同時完成的更新,正確的做法是在事務(wù)的所有參與者都能夠提交之前,終止事務(wù)或推遲完成事務(wù)。例如,航空公司的定票程序應(yīng)該同時完成對客戶的銀行帳號計入借方和對航空公司的銀行帳戶計入貸方。如果一個更新屬于事務(wù)整體的一部分,但可能晚于其他更新,您可能不希望讓客戶等待整個更新過程的完成。例如,機票預(yù)定事務(wù)可能也要向食品供應(yīng)商發(fā)送食品訂單或更新客戶的旅程津貼。這些操作雖然也必須完成,但可以晚一些。
Microsoft Message Queue Server 使您能夠?qū)⒁粋或一組更新捆綁到一個事務(wù)性消息中送給遠程服務(wù)器。Message Queue Server 保證更新將被發(fā)送給遠程服務(wù)器,即使目前網(wǎng)絡(luò)不可用。您的應(yīng)用將收到一個提交消息,從而可以繼續(xù)處理事務(wù)。