Megosztás a következőn keresztül:


Vállalati szolgáltatások tranzakciós összetevőinek integrálása

A Windows Communication Foundation (WCF) automatikus mechanizmust biztosít az Enterprise Services szolgáltatásokkal való integrációhoz (lásd : Integrálás COM+ alkalmazásokkal). Előfordulhat azonban, hogy rugalmasan fejleszthet olyan szolgáltatásokat, amelyek belsőleg az Enterprise Servicesben üzemeltetett tranzakciós összetevőket használják. Mivel a WCF-tranzakciók funkció az System.Transactions infrastruktúrára épül, a nagyvállalati szolgáltatások WCF-sel való integrálásának folyamata megegyezik az Enterprise Services és a Nagyvállalati szolgáltatások közötti System.Transactions interoperabilitás meghatározásának folyamatával, ahogyan az az Enterprise Services és a COM+ tranzakciók közötti együttműködésben is szerepel.

A bejövő forgalom és a COM+ környezeti tranzakció közötti kívánt együttműködési szint biztosításához a szolgáltatás implementációjának létre kell hoznia egy példányt TransactionScope , és a számbavételből származó EnterpriseServicesInteropOption megfelelő értéket kell használnia.

Vállalati szolgáltatások integrálása szolgáltatásművelettel

Az alábbi kód egy engedélyezett tranzakciós folyamattal rendelkező műveletet mutat be, amely létrehoz egy TransactionScopeFull lehetőséget. Ebben a forgatókönyvben a következő feltételek érvényesek:

  • Ha az ügyfél tranzakciót bonyolít le, a művelet , beleértve az Enterprise Services-összetevő hívását is, a tranzakció hatókörén belül lesz végrehajtva. A használat Full biztosítja, hogy a tranzakció szinkronizálva legyen a System.EnterpriseServices környezettel, ami azt jelenti, hogy a környezeti tranzakció System.TransactionsSystem.EnterpriseServices megegyezik.

  • Ha az ügyfél nem hajt végre tranzakciót, a true beállítás TransactionScopeRequired új tranzakciós hatókört hoz létre a művelethez. Hasonlóképpen, a használat Full biztosítja, hogy a művelet tranzakciója megegyezik az összetevő környezetében használt System.EnterpriseServices tranzakcióval.

A további metódushívások ugyanazon művelet tranzakciójának hatókörén belül is előfordulnak.

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

Ha nincs szükség szinkronizálásra egy művelet aktuális tranzakciója és a tranzakciós Enterprise Services-összetevőkre irányuló hívások között, akkor használja a None lehetőséget a TransactionScope példány példányának létrehozásakor.

Vállalati szolgáltatások integrálása ügyféllel

Az alábbi kód bemutatja, hogy az ügyfélkód egy TransactionScope példányt használ a Full beállítással. Ebben a forgatókönyvben a tranzakciófolyamatot támogató szolgáltatásműveletek hívásai ugyanazon tranzakció hatókörén belül történnek, mint az Enterprise Services-összetevőkre irányuló hívások.

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

Lásd még