當(dāng)事務(wù)處理創(chuàng)建新對(duì)象的時(shí)候,MTS會(huì)查看兩個(gè)信息源來確定事務(wù)處理的模式。首先,它要確定對(duì)象的創(chuàng)建者是否正在一個(gè)已經(jīng)存在的事務(wù)處理里運(yùn)行。其次,它要使用組件的事務(wù)處理模式。
在Visual Basic .NET里,可以從System.EnterpriseServices.ServicedComponent里衍生出一個(gè)類,這類能夠參與事務(wù)處理。如果System.EnterpriseServices這個(gè)命名空間不在你的項(xiàng)目里,你就要把它添加到項(xiàng)目的參照里:
Public Class MTSTest
Inherits System.EnterpriseServices.ServicedComponent
End Class
要控制用于類的事務(wù)處理模式,你需要對(duì)類使用TransactionAttribute。Transaction(事務(wù)處理)屬性的構(gòu)造器能夠接受TransactionOption這個(gè)類型的枚舉參數(shù)(enumerated parameter)。TransactionAttribute可能的值有:
Disabled——對(duì)象會(huì)忽略事務(wù)處理。
NotSupported——對(duì)象不能在事務(wù)處理的范圍內(nèi)運(yùn)行。對(duì)象的創(chuàng)建不需要事務(wù)處理的存在,而不論其創(chuàng)建者是否運(yùn)行在事務(wù)處理里。
Supported——對(duì)象需要或者不需要事務(wù)處理都可以運(yùn)行。如果對(duì)象是在一個(gè)活動(dòng)的事務(wù)處理里創(chuàng)建的,那么它就要在這個(gè)已存在事務(wù)處理里運(yùn)行。如果對(duì)象不是在活動(dòng)的事務(wù)處理里創(chuàng)建的,那么對(duì)象不需要事務(wù)處理也可以運(yùn)行。
Required——對(duì)象需要一個(gè)事務(wù)處理。如果已經(jīng)存在一個(gè)活動(dòng)的事務(wù)處理,那么對(duì)象就要在這個(gè)事務(wù)處理里運(yùn)行。如果不存在活動(dòng)的事務(wù)處理,就要開始一個(gè)新的事務(wù)處理。這個(gè)值是Transaction屬性缺省的值。
RequiresNew——對(duì)象需要一個(gè)事務(wù)處理。但是,新的事務(wù)處理總是應(yīng)每個(gè)請(qǐng)求的需要而開始,即使已經(jīng)存在活動(dòng)的事務(wù)處理。
下面的代碼顯示了如何聲明一個(gè)對(duì)象需要事務(wù)處理:
(EnterpriseServices.TransactionOption.Required)> _
Public Class MTSTest
Inherits System.EnterpriseServices.ServicedComponent
End Class