ServiceModel-transactiekenmerken
Windows Communication Foundation (WCF) biedt eigenschappen op drie standaardkenmerken System.ServiceModel waarmee u het gedrag van transacties voor een WCF-service kunt configureren:
TransactionFlowAttribute
Het TransactionFlowAttribute kenmerk geeft de bereidheid aan van een bewerking in een servicecontract om binnenkomende transacties van een client te accepteren. Het kenmerk biedt dit besturingselement de volgende eigenschap: Transacties gebruiken de TransactionFlowOption opsomming om op te geven of een binnenkomende transactie Mandatory, Allowedof NotAllowed.
Dit is het enige kenmerk dat servicebewerkingen aan externe interacties met een client relateert. De kenmerken die in de volgende secties worden beschreven, hebben betrekking op het gebruik van transacties binnen de uitvoering van de bewerking.
ServiceBehaviorAttribute
Het ServiceBehaviorAttribute kenmerk geeft het interne uitvoeringsgedrag van een servicecontract-implementatie aan. Transactiespecifieke eigenschappen van dit kenmerk zijn onder andere:
TransactionAutoCompleteOnSessionClose geeft aan of een niet-voltooide transactie moet worden voltooid wanneer de sessie wordt gesloten. De standaardwaarde voor deze eigenschap is
false
. Als deze eigenschap istrue
en de binnenkomende sessie correct is afgesloten in plaats van te sluiten vanwege netwerk- of clientfouten, wordt elke niet-voltooide transactie voltooid. Als deze eigenschap anders is of als de sessie niet correct isfalse
gesloten, wordt een niet-voltooide transactie teruggedraaid wanneer de sessie wordt gesloten. Als deze eigenschap istrue
, moet het binnenkomende kanaal op sessiebasis zijn.ReleaseServiceInstanceOnTransactionComplete geeft aan of het onderliggende service-exemplaar wordt vrijgegeven wanneer een transactie is voltooid. De standaardwaarde voor deze eigenschap is
true
. Het volgende binnenkomende bericht zorgt ervoor dat er een nieuw onderliggend exemplaar wordt gemaakt, waarbij elke status per transactie wordt verwijderd die het vorige exemplaar mogelijk heeft bewaard. Het vrijgeven van een service-exemplaar is een interne actie die de service onderneemt en heeft geen invloed op bestaande verbindingen of sessies die clients mogelijk hebben ingesteld. Deze functionaliteit is gelijk aan de Just-In-Time-activeringsfunctie die COM+ biedt. Als de eigenschap istrue
, ConcurrencyMode moet gelijk zijn aan Single. Anders genereert de service een ongeldige configuratievalidatie-uitzondering tijdens het opstarten.TransactionIsolationLevel geeft het isolatieniveau op dat moet worden gebruikt voor transacties binnen de service; deze eigenschap gebruikt een van de IsolationLevel waarden. Als de eigenschap lokaal isolatieniveau iets anders is dan Unspecified, moet het isolatieniveau van een binnenkomende transactie overeenkomen met de instelling van deze lokale eigenschap. Anders wordt de binnenkomende transactie geweigerd en wordt er een fout teruggestuurd naar de client. Als TransactionScopeRequired dat het zo is
true
en er geen transactie wordt gestroomd, bepaalt deze eigenschap de IsolationLevel waarde die moet worden gebruikt voor de lokaal gemaakte transactie. Als IsolationLevel dit is ingesteld op Unspecified, IsolationLevelSerializable wordt gebruikt.TransactionTimeout geeft de periode op waarin een nieuwe transactie die op de service is gemaakt, moet worden voltooid. Als deze tijd is bereikt en de transactie niet is voltooid, wordt de transactie afgebroken. Deze TimeSpan wordt gebruikt als time-out TransactionScope voor alle bewerkingen die zijn TransactionScopeRequired ingesteld
true
op en waarvoor een nieuwe transactie is gemaakt. De time-out is de maximale toegestane duur van het maken van de transactie tot de voltooiing van fase 1 in het doorvoerprotocol in twee fasen. De gebruikte time-outwaarde is altijd de lagere waarde tussen de TransactionTimeout eigenschap en detransactionTimeout
configuratie-instelling.
OperationBehaviorAttribute
Het OperationBehaviorAttribute kenmerk specificeert het gedrag van de methoden in de service-implementatie. U kunt deze gebruiken om het specifieke uitvoeringsgedrag van de bewerking aan te geven. Eigenschappen van dit kenmerk hebben geen invloed op de WSDL-beschrijving (Web Service Description Language) van het servicecontract en zijn uitsluitend elementen van het WCF-programmeermodel die algemene functies mogelijk maken die ontwikkelaars anders zelf moeten implementeren.
Dit kenmerk heeft de volgende transactiespecifieke eigenschappen:
TransactionScopeRequired geeft aan of een methode moet worden uitgevoerd binnen een actief transactiebereik. De standaardwaarde is
false
. Als het OperationBehaviorAttribute kenmerk niet is ingesteld voor een methode, betekent dit ook dat de methode niet wordt uitgevoerd in een transactie. Als een transactiebereik niet vereist is voor een bewerking, wordt een transactie die aanwezig is in de berichtkop niet geactiveerd en blijft deze als element van de IncomingMessagePropertiesOperationContext. Als een transactiebereik vereist is voor een bewerking, wordt de bron voor de transactie afgeleid van een van de volgende:Als een transactie wordt gestroomd vanaf de client, wordt de methode uitgevoerd onder een transactiebereik dat is gemaakt met behulp van die gedistribueerde transactie.
Bij een transport in de wachtrij wordt de transactie gebruikt om het bericht uit de wachtrij te verwijderen. Houd er rekening mee dat de gebruikte transactie geen gestroomde transactie is, omdat deze niet is opgegeven door de oorspronkelijke afzender van het bericht.
Een aangepast transport kan een transactie bieden via het gebruik van de
TransportTransactionProperty
.Als geen van de bovenstaande gegevens een externe bron voor een transactie biedt, wordt er direct een nieuw Transaction exemplaar gemaakt voordat de methode wordt aangeroepen.
TransactionAutoComplete geeft aan of de transactie waarin de methode wordt uitgevoerd automatisch wordt voltooid als er geen onverwerkte uitzonderingen worden gegenereerd. Als deze eigenschap is
true
, markeert de aanroepende infrastructuur de transactie automatisch als 'voltooid' als de gebruikersmethode wordt geretourneerd zonder een uitzondering te genereren. Als deze eigenschap isfalse
, wordt de transactie gekoppeld aan het exemplaar en wordt deze alleen gemarkeerd als 'voltooid' als de client een volgende methode aanroept die is gemarkeerd met deze eigenschap gelijk aantrue
, of als een volgende methode expliciet aanroept SetTransactionComplete. Als u een van deze resultaten niet uitvoert, wordt de transactie nooit 'voltooid' en wordt het opgenomen werk niet doorgevoerd, tenzij de TransactionAutoCompleteOnSessionClose eigenschap is ingesteld optrue
. Als deze eigenschap is ingesteld optrue
, moet u een kanaal met een sessie gebruiken en moet de InstanceContextMode eigenschap worden ingesteld op PerSession.