Sdílet prostřednictvím


Integrace transakčních komponent služeb Enterprise Services

Windows Communication Foundation (WCF) poskytuje automatický mechanismus pro integraci se službami Enterprise (viz Integrace s aplikacemi MODELU COM+). Můžete ale chtít flexibilitu při vývoji služeb, které interně používají transakční komponenty hostované v rámci služeb Enterprise Services. Vzhledem k tomu, že funkce transakcí WCF je založená na System.Transactions infrastruktuře, proces integrace podnikových služeb se službou WCF je stejný jako pro určení interoperability mezi System.Transactions službami a podnikovými službami, jak je uvedeno v interoperabilitě se službami Enterprise Services a transakcemi MODELU COM+.

Aby bylo možné zajistit požadovanou úroveň interoperability mezi příchozí tok transakcí a kontextovou transakcí modelu COM+, musí implementace služby vytvořit TransactionScope instanci a použít odpovídající hodnotu z výčtu EnterpriseServicesInteropOption .

Integrace podnikových služeb s operací služby

Následující kód ukazuje operaci s povoleným tokem transakce, která vytvoří TransactionScope s Full možností. V tomto scénáři platí následující podmínky:

Jakákoli další volání metody také probíhají v rámci rozsahu transakce stejné operace.

[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  
   }  
}  

Pokud se mezi aktuální transakcí operace a voláními komponent služeb Enterprise Services nevyžaduje žádná synchronizace, použijte tuto None možnost při vytváření TransactionScope instance instance.

Integrace podnikových služeb s klientem

Následující kód ukazuje klientský kód pomocí TransactionScope instance s Full nastavením. V tomto scénáři se volání operací služby, které podporují tok transakcí, vyskytují v rámci stejné transakce jako volání komponent služeb Enterprise Services.

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();  
}  

Viz také