Dienste und TransaktionenServices and Transactions

Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)-Anwendungen können eine Transaktion aus einem Client initiieren und die Transaktion im Dienstvorgang koordinieren. applications can initiate a transaction from within a client and coordinate the transaction within the service operation. Clients können eine Transaktion initiieren und mehrere Dienstvorgänge aufrufen und sicherstellen, dass für die Dienstvorgänge entweder ein Commit oder ein Rollback als einzelne Einheit ausgeführt wurde.Clients can initiate a transaction and invoke several service operations and ensure that the service operations are either committed or rolled back as a single unit.

Sie können das Transaktionsverhalten im Dienstvertrag aktivieren, indem Sie ein ServiceBehaviorAttribute festlegen und die TransactionIsolationLevel-Eigenschaft und die TransactionScopeRequired-Eigenschaft für Dienstvorgänge, die Clienttransaktionen benötigen, festlegen.You can enable the transaction behavior in the service contract by specifying a ServiceBehaviorAttribute and setting its TransactionIsolationLevel and TransactionScopeRequired properties for service operations that require client transactions. Der TransactionAutoComplete-Parameter legt fest, ob die Transaktion, in der die Methode ausgeführt wird, automatisch abgeschlossen wird, wenn keine unbehandelten Ausnahmen ausgelöst werden.The TransactionAutoComplete parameter specifies whether the transaction in which the method executes is automatically completed if no unhandled exceptions are thrown. Weitere Informationen finden Sie unterFor more information aboutDiese Attribute finden Sie unter ServiceModel-Transaktionsattribute. these attributes, see ServiceModel Transaction Attributes.

Die Aufgaben (z. B. die Protokollierung von Datenbankupdates), die in den Dienstvorgängen ausgeführt und von einem Ressourcenmanager verwaltet werden, sind Teil der Clienttransaktionen.The work that is performed in the service operations and managed by a resource manager, such as logging database updates, is part of the client’s transaction.

Das folgende Beispiel veranschaulicht die Nutzung der ServiceBehaviorAttribute-Attribute und OperationBehaviorAttribute-Attribute bei der Steuerung des Transaktionsverhalten aufseiten des Dienstes.The following sample demonstrates usage of the ServiceBehaviorAttribute and OperationBehaviorAttribute attributes to control service-side transaction behavior.

[ServiceBehavior(TransactionIsolationLevel = System.Transactions.IsolationLevel.Serializable)]  
public class CalculatorService: ICalculatorLog  
{  
    [OperationBehavior(TransactionScopeRequired = true,  
                           TransactionAutoComplete = true)]  
    public double Add(double n1, double n2)  
    {  
        recordToLog(String.Format("Added {0} to {1}", n1, n2));  
        return n1 + n2;  
    }  

    [OperationBehavior(TransactionScopeRequired = true,   
                               TransactionAutoComplete = true)]  
    public double Subtract(double n1, double n2)  
    {  
        recordToLog(String.Format("Subtracted {0} from {1}", n1, n2));  
        return n1 - n2;  
    }  

    [OperationBehavior(TransactionScopeRequired = true,   
                                       TransactionAutoComplete = true)]  
    public double Multiply(double n1, double n2)  
    {  
        recordToLog(String.Format("Multiplied {0} by {1}", n1, n2));  
        return n1 * n2;  
    }  

    [OperationBehavior(TransactionScopeRequired = true,   
                                       TransactionAutoComplete = true)]  
    public double Divide(double n1, double n2)  
    {  
        recordToLog(String.Format("Divided {0} by {1}", n1, n2));  
        return n1 / n2;  
    }  

}  

Können Sie Transaktionen aktivieren und Transaktion unter Konfigurieren des Clients und -service-Bindungen verwendet die WS-AtomicTransaction-Protokoll und das Festlegen der <TransactionFlow > Element true(siehe) in der folgenden Beispielkonfiguration.You can enable transactions and transaction flow by configuring the client and service bindings to use the WS-AtomicTransaction protocol, and setting the <transactionFlow> element to true, as shown in the following sample configuration.

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

Clients können eine Transaktion starten, indem Sie TransactionScope erstellen und Dienstvorgänge im Transaktionsumfang aufrufen.Clients can begin a transaction by creating a TransactionScope and invoking service operations within the scope of the transaction.

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

Siehe auchSee Also

Transaktionsunterstützung in System.ServiceModelTransactional Support in System.ServiceModel
TransaktionsmodelleTransaction Models
WS-TransaktionsflussWS Transaction Flow