Aracılığıyla paylaş


Hizmetler ve İşlemler

Windows Communication Foundation (WCF) uygulamaları bir istemcinin içinden bir işlem başlatabilir ve işlemi hizmet işlemi içinde koordine edebilir. İstemciler bir işlem başlatıp çeşitli hizmet işlemlerini çağırabilir ve hizmet işlemlerinin tek bir birim olarak işlenip geri alındığından emin olabilir.

bir belirtip ServiceBehaviorAttribute istemci işlemleri gerektiren hizmet işlemleri için ve özelliklerini ayarlayarak TransactionIsolationLevelTransactionScopeRequired hizmet sözleşmesindeki işlem davranışını etkinleştirebilirsiniz. parametresi, TransactionAutoComplete işlenemeyen özel durumlar oluşursa yöntemin yürütüldiği işlemin otomatik olarak tamamlanıp tamamlanmayacağını belirtir. Bu öznitelikler hakkında daha fazla bilgi için bkz . ServiceModel İşlem Öznitelikleri.

Hizmet işlemlerinde gerçekleştirilen ve veritabanı güncelleştirmelerini günlüğe kaydetme gibi bir kaynak yöneticisi tarafından yönetilen iş, istemcinin işleminin bir parçasıdır.

Aşağıdaki örnek, hizmet tarafı işlem davranışını denetlemek için ve OperationBehaviorAttribute özniteliklerinin kullanımını ServiceBehaviorAttribute gösterir.

[ServiceBehavior(TransactionIsolationLevel = System.Transactions.IsolationLevel.Serializable)]  
public class CalculatorService: ICalculatorLog  
{  
    [OperationBehavior(TransactionScopeRequired = true,  
                           TransactionAutoComplete = true)]  
    public double Add(double n1, double n2)  
    {  
        recordToLog($"Added {n1} to {n2}");
        return n1 + n2;  
    }  
  
    [OperationBehavior(TransactionScopeRequired = true,
                               TransactionAutoComplete = true)]  
    public double Subtract(double n1, double n2)  
    {  
        recordToLog($"Subtracted {n1} from {n2}");
        return n1 - n2;  
    }  
  
    [OperationBehavior(TransactionScopeRequired = true,
                                       TransactionAutoComplete = true)]  
    public double Multiply(double n1, double n2)  
    {  
        recordToLog($"Multiplied {n1} by {n2}");
        return n1 * n2;  
    }  
  
    [OperationBehavior(TransactionScopeRequired = true,
                                       TransactionAutoComplete = true)]  
    public double Divide(double n1, double n2)  
    {  
        recordToLog($"Divided {n1} by {n2}", n1, n2);
        return n1 / n2;  
    }  
  
}  

İstemci ve hizmet bağlamalarını WS-AtomicTransaction protokollerini kullanacak şekilde yapılandırarak ve aşağıdaki örnek yapılandırmada gösterildiği gibi transactionFlow> öğesini olarak trueayarlayarak <işlemleri ve işlem akışını etkinleştirebilirsiniz.

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

İstemciler, işlem kapsamında hizmet TransactionScope işlemleri oluşturup çağırarak işlem başlatabilir.

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

Ayrıca bkz.