Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
WcF-toepassingen (Windows Communication Foundation) kunnen een transactie starten vanuit een client en de transactie coördineren binnen de servicebewerking. Clients kunnen een transactie initiëren en verschillende servicebewerkingen aanroepen en ervoor zorgen dat de servicebewerkingen worden doorgevoerd of teruggedraaid als één eenheid.
U kunt het transactiegedrag in het servicecontract inschakelen door een ServiceBehaviorAttribute op te geven en de eigenschappen TransactionIsolationLevel en TransactionScopeRequired in te stellen voor servicebewerkingen waarvoor clienttransacties vereist zijn. De TransactionAutoComplete parameter geeft aan of de transactie waarin de methode wordt uitgevoerd automatisch wordt voltooid als er geen onverwerkte uitzonderingen worden gegenereerd. Zie ServiceModel Transaction Attributes voor meer informatie over deze kenmerken.
Het werk dat wordt uitgevoerd in de serviceactiviteiten en wordt beheerd door een resourcemanager, zoals bijvoorbeeld het bijwerken van database logboeken, maakt deel uit van de transactie van de client.
In het volgende voorbeeld ziet u het gebruik van de kenmerken ServiceBehaviorAttribute en OperationBehaviorAttribute voor het beheren van transactiegedrag aan de dienstzijde.
[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;
}
}
U kunt transacties en transactiestroom inschakelen door de client- en servicebindingen te configureren om het WS-AtomicTransaction-protocol te gebruiken en het <transactionFlow-element> in te truestellen op , zoals wordt weergegeven in de volgende voorbeeldconfiguratie.
<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 kunnen een transactie starten door een TransactionScope te maken en servicebewerkingen aan te roepen binnen de reikwijdte van de transactie.
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
//Do work here
ts.Complete();
}