COM+事務和IIS

來源:互聯網
上載者:User
iis


     Microsoft已經緊密地整合了IIS和COM+的功能,這使我們能非常容易地在事務性Web頁面編程中利用交易處理應用程式。有許多不同方式整合COM+和IIS的事務特性,這些例子包括:
    ? 事務性ASP。
    ? ASP 中的ObjectContext。
    ? 事務性事件。
    開發人員可以在使用IIS和COM+的應用程式中使用一個或多個這些特性。因為它們是緊密整合的,開發人員只進行少量的工作,就能充分利用這些服務。事實上,在COM+ 中ObjectContext封裝了一個事務,可以直接用於事務中的ASP頁面。
19.4.1 事務性ASP
    由於IIS 4.0和MTS的整合,開發人員可以在一個事務中包含ASP指令碼。這些ASP網頁可以包含對伺服器組件的調用,這些組件也將參與相同的事務。同所有的事務一樣,如果事務的任一部分失敗,將復原整個事務。事務性ASP指令碼所增加的優點就是使得把多個組件綁定到單個事務中變得簡單化。
    當處理一個終止的事務時,使用事務性指令碼有一個問題。通過資料庫的資源管理員訪問資料庫產生的改變將被自動地復原,然而, COM+不能復原指令碼自身產生的變化。例如,使用指令碼產生的任何變化,如對Session或Application變數的改變,將不會自動地復原。以後你將看到如何使用事務性事件通知事務已經終止。當處理這個事件時,能手工地復原COM+不能自動復原的變化。這種限制的原因是COM+事務只能復原與MS DTC相容的服務產生的變化。
    在IIS 5.0中有一個新特性。開發人員具有使得一個事務跨越多個ASP指令碼網頁的能力。這歸功於在Server對象上新增的Execute和Transfer方法。
    然而,正常情況下,單個事務的所有處理可以在單個ASP網頁中完成。例如,如果一個應用程式有一個組件從一個帳戶中提款,而另一個組件在一個帳戶中存款。為了把資金從一個帳戶轉到另一個帳戶,建立ASP指令碼,利用提款組件從帳戶中取出資金,使用存款組件把資金存入新的帳戶。將所有這些功能放入一個事務性ASP網頁中,如果事務過程的任一部分失敗,就復原所有的變化,帳戶餘額回到其初始值。
    為聲明一個網頁是事務性的,使用下列指令:
    <%@ TRANSACTION=value %>
    對TRANSACTION指令可能的設定有:
    ? Disabled:告訴COM+不希望在事務中涉及組件。
    ? Requires_New:即使已存在一個事務,也啟動一個新的事務。
    ? Required:如果不存在事務就啟動一個新的,如果存在就參與到其中。
    ? Supported:不啟動一個事務,但是如果事務已經存在就參與它。
    ? Not_Supported:即使存在事務,也不參與事務。
    這些值與使用元件服務瀏覽器為每個組件設定的Transaction Support屬性的作用相同。
    TRANSACTION指令必須處在ASP頁面指令碼的第一行,通常由LANGUAGE指令包含。如果這之前在頁面中有任何內容,將產生指令碼錯誤。如同組件中的事務一樣,如果到達代碼的最後一行,還沒有提交或終止,則COM+假定提交,並把變化寫入磁碟。另外,由頁面調用的每個對象能夠使用同一ASP頁面的ObjectContext對象參與事務,通常就是這麼做的。
19.4.2 事務性ASP中的ObjectContext對象
    當編寫一個事務性ASP指令碼時,你可能想直接影響指令碼的事務的結果。像為事務編寫的組件一樣,ASP頁也能利用ObjectContext對象。自從發表了ASP 2.0以後,就可以利用這個對象,它為開發人員需要的所有交易處理常式提供功能。伺服器組件參與事務時訪問的就是這個對象,它包含SetAbort和SetComplete方法。
    下列代碼顯示了在一個事務性Web頁中如何執行個體化兩個COM對象和一個事務,並在這兩個對象上調用一個方法。
    注意,頁面頂部的事務設定表明請求一個事務。正是該設定使該頁面像COM組件一樣參與同一事務。事實上,只要COM組件的Transaction Support屬性為Required或Supported,它們就變成由ASP頁啟動的事務的一部分。


    隨著ASP頁執行,調用每個COM類的一個方法。當執行每個方法時,其傳回值用於決定處理是否成功。如果任一方法返回一個非零值, ASP頁務。否則, ASP頁將提交事務並將變化存入磁碟。
    這個例子的要點是所有的方法調用隨著ASP頁面一調用ObjectContext對象中的SetAbort方法,復原事起進入到同一事務中。
    上述的例子還可以改寫,使得COM組件中的方法從內部調用SetComplete和SetAbort方法。這將從ASP頁中刪除一些邏輯,並嵌入到COM組件中。用這種方式編寫事務的唯一問題是ASP頁不知道將要提交還是終止事務。然而,這可以通過實現事務事件來解決。
19.4.3 事務事件
    ASP頁也具有偵聽COM+的能力,可以瞭解事務何時將提交或終止。這是通過在COM+提交或終止事務前IIS調用兩個常式來實現的。這兩個方法稱為O Transaction Commit和On TransactionAbort。
    OnTransactionCommit方法在COM+提交事務之前、準備階段之後被觸發。只要事務中沒有任何部分終止,將觸發OnTransactionCommit常式(事件),提交事務。如果事務被終止,則觸發OnTransactionAbort事件:

    同大多數事務性ASP頁一樣,上述例子的開始外聲明它要求一個事務,接下來指令碼調用一個事務性COM對象的方法。一旦完成該頁, COM+將通過檢查是否有事務的某一部分調用了SetAbort方法來決定事務的結果。如果沒有調用SetAbort方法,就觸發OnTransactionCommit事件,並且提交該事務;如果調用了SetAbort方法,則觸發OnTransactionAbort事件,復原事務。




相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。