Bagikan melalui


Layanan dan Transaksi

Aplikasi Windows Communication Foundation (WCF) dapat memulai transaksi dari dalam klien dan mengoordinasikan transaksi dalam operasi layanan. Klien dapat memulai transaksi dan meminta beberapa operasi layanan dan memastikan bahwa operasi layanan dilakukan atau digulirkan kembali sebagai satu unit.

Anda dapat mengaktifkan perilaku transaksi dalam kontrak layanan dengan menetapkan ServiceBehaviorAttribute dan menyetel properti TransactionIsolationLevel dan TransactionScopeRequired untuk operasi layanan yang memerlukan transaksi klien. Parameter TransactionAutoComplete menentukan apakah transaksi di mana metode dijalankan selesai secara otomatis jika tidak ada pengecualian yang tidak ditangani yang dilemparkan. Untuk informasi selengkapnya tentang atribut ini, lihat Atribut Transaksi ServiceModel.

Pekerjaan yang dilakukan dalam operasi layanan dan dikelola oleh manajer sumber daya, seperti mencatat pembaruan basis data, adalah bagian dari transaksi klien.

Sampel berikut menunjukkan penggunaan atribut ServiceBehaviorAttribute dan OperationBehaviorAttribute untuk mengontrol perilaku transaksi sisi layanan.

[ServiceBehavior(TransactionIsolationLevel = System.Transactions.IsolationLevel.Serializable)]  
public class CalculatorService: ICalculatorLog  
{  
    [OperationBehavior(TransactionScopeRequired = true,  
                           TransactionAutoComplete = true)]  
    public double Add(double n1, double n2)  
    {  
        recordToLog($"Added {n1} to {n2}");
        return n1 + n2;  
    }  
  
    [OperationBehavior(TransactionScopeRequired = true,
                               TransactionAutoComplete = true)]  
    public double Subtract(double n1, double n2)  
    {  
        recordToLog($"Subtracted {n1} from {n2}");
        return n1 - n2;  
    }  
  
    [OperationBehavior(TransactionScopeRequired = true,
                                       TransactionAutoComplete = true)]  
    public double Multiply(double n1, double n2)  
    {  
        recordToLog($"Multiplied {n1} by {n2}");
        return n1 * n2;  
    }  
  
    [OperationBehavior(TransactionScopeRequired = true,
                                       TransactionAutoComplete = true)]  
    public double Divide(double n1, double n2)  
    {  
        recordToLog($"Divided {n1} by {n2}", n1, n2);
        return n1 / n2;  
    }  
  
}  

Anda dapat mengaktifkan transaksi dan alur transaksi dengan mengonfigurasi pengikatan klien dan layanan untuk menggunakan protokol WS-AtomicTransaction, dan mengatur elemen <transactionFlow> ke true, seperti yang ditunjukkan dalam konfigurasi sampel berikut.

<client>  
    <endpoint address="net.tcp://localhost/ServiceModelSamples/service"
          binding="netTcpBinding"
          bindingConfiguration="netTcpBindingWSAT"
          contract="Microsoft.ServiceModel.Samples.ICalculatorLog" />  
</client>  
  
<bindings>  
    <netTcpBinding>  
        <binding name="netTcpBindingWSAT"  
                transactionFlow="true"  
                transactionProtocol="WSAtomicTransactionOctober2004" />  
     </netTcpBinding>  
</bindings>  

Klien dapat memulai transaksi dengan membuat TransactionScope dan memanggil operasi layanan dalam cakupan transaksi.

using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))  
{  
    //Do work here  
    ts.Complete();  
}  

Lihat juga