Integrieren von Enterprise Services-TransaktionskomponentenIntegrating Enterprise Services Transactional Components

Windows Communication Foundation (WCF) bietet einen automatischen Mechanismus zum Integrieren von Enterprise Services (siehe Integrieren von COM+-Anwendungen).Windows Communication Foundation (WCF) provides an automatic mechanism for integrating with Enterprise Services (see Integrating with COM+ Applications). Möglicherweise benötigen Sie die Flexibilität zur Entwicklung von Diensten, die von Enterprise Services gehostete Transaktionskomponenten intern verwenden.However, you may want the flexibility to develop services that internally use transactional components hosted within Enterprise Services. Da die WCF-Transaktionsfunktion erstellt werden, auf die System.Transactions Infrastruktur, die der Prozess zum Integrieren von Enterprise Services in WCF ist identisch mit dem zum Angeben der Interoperabilität zwischen System.Transactions und Enterprise Services, wie in Interoperabilität mit EnterpriseServices und COM+-Transaktionen.Because the WCF Transactions feature is built on the System.Transactions infrastructure, the process for integrating Enterprise Services with WCF is identical to that for specifying interoperability between System.Transactions and Enterprise Services, as outlined in Interoperability with Enterprise Services and COM+ Transactions.

Um das gewünschte Maß an Interoperabilität zwischen der eingehenden übergebenden Transaktion und der COM+-Kontexttransaktion zu erzielen, muss die Dienstimplementierung eine TransactionScope-Instanz erstellen und den entsprechenden Wert der EnterpriseServicesInteropOption-Enumeration verwenden.To provide the desired level of interoperability between the incoming flowed transaction and the COM+ context transaction, the service implementation must create a TransactionScope instance and use the appropriate value from the EnterpriseServicesInteropOption enumeration.

Integrieren von Enterprise Services mit einem DienstvorgangIntegrating Enterprise Services with a Service Operation

Der folgende Code veranschaulicht einen Vorgang mit zugelassenem Transaktionsfluss, der einen TransactionScope mit der Full-Option erstellt.The following code demonstrates an operation, with Allowed transaction flow, that creates a TransactionScope with the Full option. Die folgenden Bedingungen sind in diesem Szenario gültig:The following conditions apply in this scenario:

  • Wenn der Client eine Transaktion übergibt, wird der Vorgang, einschließlich des Aufrufs der Enterprise Services-Komponente, innerhalb des Umfangs dieser Transaktion ausgeführt.If the client flows a transaction, the operation, including the call to the Enterprise Services component, is executed within the scope of that transaction. Mit Full wird sichergestellt, dass die Transaktion mit dem System.EnterpriseServices-Kontext synchronisiert wird. Dies bedeutet, dass die Ambient-Transaktion für System.Transactions und System.EnterpriseServices identisch ist.Using Full ensures that the transaction is synchronized with the System.EnterpriseServices context, which means that the ambient transaction for System.Transactions and the System.EnterpriseServices is the same.

  • Wenn der Client keine Transaktion übergibt, wird durch Festlegen von TransactionScopeRequired auf true ein neuer Transaktionsumfang für den Vorgang erstellt.If the client does not flow a transaction, setting TransactionScopeRequired to true creates a new transaction scope for the operation. Auf ähnliche Weise wird mit Full sichergestellt, dass die Transaktion des Vorgangs mit der Transaktion übereinstimmt, die innerhalb des Kontexts der System.EnterpriseServices-Komponente verwendet wird.Similarly, using Full ensures that the operation’s transaction is the same as the transaction used inside the System.EnterpriseServices component's context.

Alle zusätzlichen Methodenaufrufe treten auch innerhalb des Transaktionsumfangs des gleichen Vorgangs auf.Any additional method calls also occur within the scope of the same operation’s transaction.

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

Wenn keine Synchronisierung zwischen der aktuellen Transaktion eines Vorgangs und den Aufrufen für die Transaktionskomponenten von Enterprise Services erforderlich ist, verwenden Sie die None-Option zum Instanziieren der TransactionScope-Instanz.If no synchronization is required between an operation’s current transaction and calls to transactional Enterprise Services components, then use the None option when instantiating the TransactionScope instance.

Integrieren von Enterprise Services mit einem ClientIntegrating Enterprise Services with a Client

Der folgende Code veranschaulicht Clientcode, der eine TransactionScope-Instanz mit der Full-Einstellung verwendet.The following code demonstrates client code using a TransactionScope instance with the Full setting. In diesem Szenario treten Aufrufe für Dienstvorgänge, die den Transaktionsfluss unterstützen, innerhalb des Umfangs derselben Transaktion auf wie die Aufrufe für Enterprise Services-Komponenten.In this scenario, calls to service operations that support transaction flow occur within the scope of the same transaction as the calls to Enterprise Services components.

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

Siehe auchSee Also

Integrieren von COM+-AnwendungenIntegrating with COM+ Applications
Integrieren von COM-AnwendungenIntegrating with COM Applications