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