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