Procedura: utilizzare la funzionalità BYOT (Bring Your Own Transaction) di COM+
Esempio di codice
Nella procedura e nell'esempio riportati di seguito viene illustrato come in una classe derivata dalla classe ServicedComponent sia possibile utilizzare la funzionalità BYOT di COM+ per accedere a DTC (Distributed Transaction Coordinator). Per ulteriori informazioni sull'utilizzo della funzionalità BYOT dall'interno dello spazio dei nomi System.EnterpriseServices, vedere BYOT (Bring Your Own Transaction).
Per creare un oggetto che utilizza la transazione da un altro oggetto.
Definire una classe derivata dalla classe ServicedComponent ed esporre una proprietà pubblica che restituisce l'oggetto DTC Transaction corrente di COM+. Nel codice riportato di seguito, ad esempio, la classe
Base
eredita la classe ServicedComponent e dispone di una proprietà pubblica che restituisce l'oggetto ContextUtil.Transaction per la transazione DTC di COM+ in cui viene creata l'istanza dell'oggetto.Imports System.EnterpriseServices Public Class Base Inherits ServicedComponent Public Readonly Property Transaction() as Object Get Return ContextUtil.Transaction End Get End Property End Class
using System.EnterpriseServices; public class Base : ServicedComponent { public Object Transaction { get { return ContextUtil.Transaction; } } }
Creare due classi che derivano dalla classe definita nel passaggio 1 e impostare l'attributo Transaction per entrambe le classi. Ad esempio, nel codice riportato di seguito vengono dichiarate due classi
CTransaction1
andCTransaction2
che derivano dalla classeBase
e hanno l'attributo Transaction impostato.<Transaction()> Public Class CTransaction1 Inherits Base ' Insert your transaction logic here. End Class <Transaction()> Public Class CTransaction2 Inherits Base ' Insert your transaction logic here. End Class
[Transaction] public class CTransaction1 : Base { // Insert your transaction logic here. } [Transaction] public class CTransaction2 : Base { // Insert your transaction logic here. }
Creare un'applicazione client che utilizza le classi create nel passaggio 2 per il test della funzionalità BYOT.
Creare un'istanza di una delle classi definite nel passaggio 2. Il codice riportato di seguito, ad esempio, consente la creazione di un'istanza della classe
CTransaction1
.Class BYOTDemonstration Public Shared Sub Main() Dim tx1 as New CTransaction1 End Sub End Class
class BYOTDemonstration { static void Main() { CTransaction1 tx1 = new CTransaction1(); } }
Recuperare la transazione DTC corrente di COM+ dall'oggetto creato nel passaggio 3.a. Il codice riportato di seguito, ad esempio, consente di recuperare l'oggetto Transaction dalla proprietà pubblica
Transaction
della classeCTransaction1
.Dim tx as Object = tx1.Transaction
Object tx = tx1.Transaction;
Creare un'istanza della seconda classe definita nel passaggio 2, utilizzando l'oggetto Transaction recuperato nel passaggio 3.b. Il codice riportato di seguito, ad esempio, consente la creazione di un'istanza della classe
CTransaction2
mediante l'oggetto Transaction recuperato nel passaggio 3.b.Dim tx2 as CTransaction2 = ctype(BYOT.CreateWithTransaction(tx, _ gettype(CTransaction2)),CTransaction2)
CTransaction2 tx2 = (CTransaction2)BYOT.CreateWithTransaction(tx, typeof(CTransaction2));
Generare una chiave sicura e compilare l'esempio nel modo indicato di seguito:
sn –k BYOTDemo.snk vbc /r:System.EnterpriseServices.dll BYOTDemo.vb
sn –k BYOTDemo.snk
Esempio
Imports System
Imports System.Reflection
Imports System.EnterpriseServices
<assembly: AssemblyKeyFile("BYOTDemo.snk")>
Public Class Base
Inherits ServicedComponent
Public Readonly Property Transaction() as Object
Get
Return ContextUtil.Transaction
End Get
End Property
End Class
<Transaction()> Public Class CTransaction1
Inherits Base
' Insert your transaction logic here.
End Class
<Transaction()> Public Class CTransaction2
Inherits Base
' Insert your transaction logic here.
End Class
Class BYOTDemonstration
Public Shared Sub Main()
' Create a transactional object, and then get its
' transaction.
Dim tx1 as New CTransaction1
Console.WriteLine("Created transaction1.")
Dim tx as Object = tx1.Transaction
Console.WriteLine("Got the transaction of transaction1.")
Dim tx2 as CTransaction2 = ctype(BYOT.CreateWithTransaction(tx, _ gettype(CTransaction2)),CTransaction2)
Console.WriteLine("Created transaction2 with the _
transaction of transaction1.")
End Sub
End Class
using System;
using System.Reflection;
using System.EnterpriseServices;
[assembly: AssemblyKeyFileAttribute("byotdemo.snk")]
public class Base : ServicedComponent
{
public Object Transaction
{
get { return ContextUtil.Transaction; }
}
}
[Transaction]
public class CTransaction1 : Base
{
// Insert your transaction logic here.
}
[Transaction]
public class CTransaction2 : Base
{
// Insert your transaction logic here.
}
class BYOTDemonstration
{
static void Main()
{
/* Create a transactional object, and then get its
transaction. */
CTransaction1 tx1 = new CTransaction1();
Console.WriteLine("Created transaction1.");
Object tx = tx1.Transaction;
Console.WriteLine("Got the transaction of transaction1.");
CTransaction2 tx2 = (CTransaction2)BYOT.CreateWithTransaction(tx, typeof(CTransaction2));
Console.WriteLine("Created transaction2 using the transaction of transaction1.");
}
}
Vedere anche
Riferimenti
System.EnterpriseServices Namespace
Concetti
Funzionalità BYOT (Bring Your Own Transaction)
Riepilogo dei servizi COM+ disponibili
Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.