商業應用程序常常需要具有在事務內部運行腳本和組件的能力。事務是一種服務器操作,即使該操作包括很多步驟(例如,定貨、查看存貨、付帳等),也只能整體返回操作是成功還是失敗。用戶可以創建在事務內部運行的 asp 腳本,如果腳本的任何一部分失敗,整個事務都將會終止。
ASP 事務處理是以 Microsoft® Transaction Server (MTS) 為基礎的。Microsoft® Transaction Server (MTS) 是一個事務處理系統,用于開發、配置和管理高性能、可分級的、有魯棒性的企業 Internet 和 Intranet 服務器應用程序。Transaction Server 為開發分布式的,基于組件的應用程序提供了一個應用程序設計模型。它也為配置和管理這些應用程序提供了一個運行環境。
創建事務性腳本的功能內置在 Internet Information Server 和 Personal Web Server 中。如果您安裝了 Microsoft Transaction Server,就可以將組件打包,以使組件在事務內部運行。
如果沒有 MTS,您就需要編寫腳本和組件,手工跟蹤請求的更改情況,以便在某些更改失敗時恢復數據。使用 MTS,您只需簡單的將您的腳本和組件聲明為“需要事務”并讓 MTS 處理事務的一致性。事務處理只適用于數據庫訪問;MTS 不能對文件系統或其他的非事務性資源的更改進行恢復操作。應用程序所訪問的數據庫必須為 MTS 所支持。目前,MTS 支持 SQL Server 及任何支持 XA 協議(由 X/Open 協會制定)的服務器。MTS 將繼續擴展對其他數據庫的支持。
事務不能跨越多個 ASP 頁。如果一個事務需要來自多個組件的對象,則須將使用這些對象的操作組合在一個 ASP 頁中。例如,假定有一個組件用于更新工資單數據庫,還有一個組件用于更新人力資源數據庫中的員工記錄。為了記錄一個員工的新的工資信息,您需要編寫這樣一個腳本,該腳本在一個事務環境中調用這兩個組件,一個用于更新工資單數據庫,另一個用于更新人力資源數據庫中的員工等級。
聲明事務性腳本 在將一個頁聲明為事務性時,此頁中的任何腳本命令和對象都運行在同一個事務環境中。Transaction Server 處理生成事務的細節并決定事務成功(提交)或失敗(終止)。要將某個頁聲明為事務性,可在頁首添加 @TRANSACTION 指令:
如果事務被終止,Transaction Server 將恢復對支持事務的資源的任何更改。目前,僅數據庫服務器完全支持事務,因為數據庫中的數據對于企業應用是最為關鍵的。Transaction Server 不對硬盤上的文件、會話和應用程序的變量、集合等的改變進行恢復。然而您可以如下文主題所述,通過編寫事務事件來編寫恢復變量和集合的腳本。在某些時候,您的腳本也可以顯式的提交或終止一個事務,如向文件寫數據失敗時。
提交或終止腳本 因為 Transaction Server 跟蹤事務處理,所以它決定事務是完全成功還是失敗。腳本可以通過調用 ObjectContext.SetAbort 顯式地聲明終止一個事務。 例如,當一個事務在從一個組件收到錯誤消息、違反商業規范時(例如,帳戶余額小于 0)或讀寫文件等非事務性操作失敗時,腳本就需要終止該事務。如果頁在事務完成之前超時,也必須終止事務。