Bagikan melalui


Mengintegrasikan Komponen Transaksional Layanan Enterprise

Windows Communication Foundation (WCF) menyediakan mekanisme otomatis untuk mengintegrasikan dengan Layanan Perusahaan (lihat Mengintegrasikan dengan Aplikasi COM+). Namun, Anda mungkin menginginkan fleksibilitas untuk mengembangkan layanan yang secara internal menggunakan komponen transaksional yang dihosting dalam Layanan Perusahaan. Karena fitur Transaksi WCF dibangun di atas infrastruktur System.Transactions, proses untuk mengintegrasikan Layanan Perusahaan dengan WCF identik dengan itu untuk menentukan interoperabilitas antara System.Transactions dan Layanan Perusahaan, seperti yang diuraikan dalam Interoperabilitas dengan Layanan Perusahaan dan Transaksi COM+.

Untuk memberikan tingkat interoperabilitas yang diinginkan antara transaksi aliran masuk dan transaksi konteks COM+, implementasi layanan harus membuat instans TransactionScope dan menggunakan nilai yang sesuai dari enumerasi EnterpriseServicesInteropOption.

Mengintegrasikan Layanan Perusahaan dengan Operasi Layanan

Kode berikut menunjukkan operasi, dengan Alur transaksi yang diizinkan, yang membuat TransactionScope dengan opsi Full. Kondisi berikut berlaku dalam skenario ini:

Setiap panggilan metode tambahan juga terjadi dalam cakupan transaksi operasi yang sama.

[ServiceContract()]  
public interface ICustomerServiceContract  
{  
   [OperationContract]  
   [TransactionFlow(TransactionFlowOption.Allowed)]  
   void UpdateCustomerNameOperation(int customerID, string newCustomerName);  
}  
  
[ServiceBehavior(TransactionIsolationLevel = System.Transactions.IsolationLevel.Serializable)]  
public class CustomerService : ICustomerServiceContract  
{  
   [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]  
   public void UpdateCustomerNameOperation(int customerID, string newCustomerName)  
   {  
   // Create a transaction scope with full ES interop  
      using (TransactionScope ts = new TransactionScope(  
                     TransactionScopeOption.Required,  
                     new TransactionOptions(),  
                     EnterpriseServicesInteropOption.Full))  
      {  
         // Create an Enterprise Services component  
         // Call UpdateCustomer method on an Enterprise Services
         // component
  
         // Call UpdateOtherCustomerData method on an Enterprise
         // Services component
         ts.Complete();  
      }  
  
      // Do UpdateAdditionalData on an non-Enterprise Services  
      // component  
   }  
}  

Jika tidak ada sinkronisasi yang diperlukan antara transaksi operasi saat ini dan panggilan ke komponen Layanan Perusahaan transaksional, maka gunakan opsi None saat membuat instans TransactionScope.

Mengintegrasikan Layanan Perusahaan dengan Klien

Kode berikut menunjukkan kode klien menggunakan instans TransactionScope dengan pengaturan Full. Dalam skenario ini, panggilan ke operasi layanan yang mendukung alur transaksi terjadi dalam cakupan transaksi yang sama dengan panggilan ke komponen Layanan Perusahaan.

static void Main()  
{  
    // Create a client  
    CalculatorClient client = new CalculatorClient();  
  
    // Create a transaction scope with full ES interop  
    using (TransactionScope ts = new TransactionScope(  
          TransactionScopeOption.Required,  
          new TransactionOptions(),  
          EnterpriseServicesInteropOption.Full))  
    {  
        // Call Add calculator service operation  
  
        // Create an Enterprise Services component  
  
        // Call UpdateCustomer method on an Enterprise Services
        // component
  
        ts.Complete();  
    }  
  
    // Closing the client gracefully closes the connection and
    // cleans up resources  
    client.Close();  
}  

Lihat juga