Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
Hizmet sözleşmesindeki işlem davranışını, istemci işlemleri gerektiren hizmet operasyonları için bir ServiceBehaviorAttribute belirterek ve TransactionIsolationLevel ile TransactionScopeRequired özelliklerini ayarlayarak etkinleştirebilirsiniz. TransactionAutoComplete parametresi, işlenemeyen özel durumlar oluşmazsa yöntemin yürütüldüğü 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 ServiceBehaviorAttribute ve OperationBehaviorAttribute özniteliklerinin kullanımını 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 protokolünü kullanacak şekilde yapılandırarak ve aşağıdaki örnek yapılandırmada gösterildiği gibi <transactionFlow> öğesini true olarak ayarlayarak 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, bir TransactionScope oluşturarak ve işlem kapsamında hizmet operasyonlarını çağırarak bir işlem başlatabilir.
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
//Do work here
ts.Complete();
}