Delen via


Transactiestroom inschakelen

Windows Communication Foundation (WCF) biedt zeer flexibele opties voor het beheren van de transactiestroom. De transactiestroominstellingen van een service kunnen worden uitgedrukt met behulp van een combinatie van kenmerken en configuratie.

Transactiestroom Instellingen

Instellingen voor transactiestromen worden gegenereerd voor een service-eindpunt als gevolg van het snijpunt van de volgende drie waarden:

  • Het TransactionFlowAttribute kenmerk dat is opgegeven voor elke methode in het servicecontract.

  • De TransactionFlow bindingseigenschap in de specifieke binding.

  • De TransactionFlowProtocol bindingseigenschap in de specifieke binding. Met de TransactionFlowProtocol bindingseigenschap kunt u kiezen uit twee verschillende transactieprotocollen die u kunt gebruiken om een transactie te stromen. In de volgende secties wordt elk van deze secties kort beschreven.

WS-AtomicTransaction Protocol

Het WS-AtomicTransaction-protocol (WS-AT) is handig voor scenario's waarin interoperabiliteit met protocolstacks van derden vereist is.

OleTransactions-protocol

Het OleTransactions-protocol is handig voor scenario's waarbij interoperabiliteit met protocolstacks van derden niet vereist is en de implementatie van een service weet van tevoren dat de WS-AT-protocolservice lokaal is uitgeschakeld of de bestaande netwerktopologie geen voorkeur geeft aan het gebruik van WS-AT.

In de volgende tabel ziet u de verschillende typen transactiestromen die kunnen worden gegenereerd met behulp van deze verschillende combinaties.

TransactionFlow

binding
Bindingseigenschap TransactionFlow TransactionFlowProtocol-bindingsprotocol Type transactiestroom
Verplicht true WS-AT Transactie moet worden gestroomd in de interoperabele WS-AT-indeling.
Verplicht true OleTransactions Transactie moet worden gestroomd in de WCF OleTransactions-indeling.
Verplicht false Niet van toepassing Niet van toepassing omdat dit een ongeldige configuratie is.
Toegestaan true WS-AT Transactie kan worden gestroomd in de interoperabele WS-AT-indeling.
Toegestaan true OleTransactions Transactie kan worden gestroomd in de WCF OleTransactions-indeling.
Toegestaan false Alle waarden Er wordt geen transactie gestroomd.
Niet toegestaan Alle waarden Alle waarden Er wordt geen transactie gestroomd.

De volgende tabel bevat een overzicht van het resultaat van de berichtverwerking.

Binnenkomend bericht TransactionFlow-instelling Transactieheader Resultaat berichtverwerking
Transactie komt overeen met de verwachte protocolindeling Toegestaan of verplicht MustUnderstand is truegelijk aan . Proces
Transactie komt niet overeen met de verwachte protocolindeling Verplicht MustUnderstand is falsegelijk aan . Geweigerd omdat een transactie is vereist
Transactie komt niet overeen met de verwachte protocolindeling Toegestaan MustUnderstand is falsegelijk aan . Geweigerd omdat de koptekst niet wordt begrepen
Transactie met behulp van een protocolindeling Niet toegestaan MustUnderstand is falsegelijk aan . Geweigerd omdat de koptekst niet wordt begrepen
Geen transactie Verplicht N.v.t. Geweigerd omdat een transactie is vereist
Geen transactie Toegestaan N.v.t. Proces
Geen transactie Niet toegestaan N.v.t. Proces

Hoewel elke methode voor een contract verschillende vereisten voor de transactiestroom kan hebben, wordt de instelling van het transactiestroomprotocol bepaald op het niveau van de binding. Dit betekent dat alle methoden die hetzelfde eindpunt delen (en daarom dezelfde binding) ook hetzelfde beleid delen dat transactiestroom toestaat of vereist, evenals hetzelfde transactieprotocol, indien van toepassing.

Transactiestroom inschakelen op methodeniveau

Vereisten voor transactiestromen zijn niet altijd hetzelfde voor alle methoden in een servicecontract. WCF biedt daarom ook een mechanisme op basis van kenmerken waarmee de voorkeuren voor de transactiestroom van elke methode kunnen worden uitgedrukt. Dit wordt bereikt door het TransactionFlowAttribute niveau op te geven waarin een servicebewerking een transactieheader accepteert. U moet uw servicecontractmethoden markeren met dit kenmerk als u de transactiestroom wilt inschakelen. Dit kenmerk gebruikt een van de waarden van de TransactionFlowOption opsomming, waarin de standaardwaarde is NotAllowed. Als een waarde behalve NotAllowed is opgegeven, moet de methode niet in één richting zijn. Een ontwikkelaar kan dit kenmerk gebruiken om vereisten of beperkingen voor transactiestromen op methodeniveau op te geven tijdens het ontwerp.

Transactiestroom inschakelen op eindpuntniveau

Naast de instelling van de transactiestroom op methodeniveau die het TransactionFlowAttribute kenmerk biedt, biedt WCF een instelling voor de gehele eindpunten voor de transactiestroom, zodat beheerders de transactiestroom op een hoger niveau kunnen beheren.

Dit wordt bereikt door de TransactionFlowBindingElement, waarmee u de binnenkomende transactiestroom kunt in- of uitschakelen in de bindingsinstellingen van een eindpunt en de gewenste indeling van het transactieprotocol voor binnenkomende transacties kunt opgeven.

Als de binding de transactiestroom heeft uitgeschakeld, maar een van de bewerkingen in een servicecontract een binnenkomende transactie vereist, wordt er een validatie-uitzondering gegenereerd bij het opstarten van de service.

De meeste vaste bindingen die WCF biedt, bevatten de transactionFlow en transactionProtocol kenmerken waarmee u de specifieke binding kunt configureren om binnenkomende transacties te accepteren. Zie binding> voor meer informatie over het instellen van de configuratie-elementen<.

Een beheerder of implementeerfunctie kan transactiestroom op eindpuntniveau gebruiken om vereisten voor transactiestromen of beperkingen tijdens de implementatie te configureren met behulp van het configuratiebestand.

Beveiliging

Om de systeembeveiliging en -integriteit te waarborgen, moet u berichtenuitwisselingen beveiligen wanneer transacties tussen toepassingen worden verzonden. U mag geen transactiegegevens doorstromen of vrijgeven aan een toepassing die niet gerechtigd is deel te nemen aan dezelfde transactie.

Bij het genereren van WCF-clients naar onbekende of niet-vertrouwde webservices via het gebruik van metagegevensuitwisseling, moeten aanroepen naar bewerkingen op deze webservices de huidige transactie onderdrukken, indien mogelijk. In het volgende voorbeeld ziet u hoe u dit doet.

//client code which has an ambient transaction  
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))  
{  
    // No transaction will flow to this operation  
    untrustedProxy.Operation1(...);  
    scope.Complete();  
}  
//remainder of client code  

Bovendien moeten services worden geconfigureerd om alleen binnenkomende transacties te accepteren van clients die ze hebben geverifieerd en geautoriseerd. Binnenkomende transacties mogen alleen worden geaccepteerd als ze afkomstig zijn van zeer vertrouwde clients.

Beleidsverklaringen

WCF gebruikt beleidsverklaringen om de transactiestroom te beheren. Beleidsverklaringen vindt u in het beleidsdocument van een service, dat wordt gegenereerd door het samenvoegen van contracten, configuratie en kenmerken. De client kan het beleidsdocument van de service verkrijgen met behulp van een HTTP GET of een WS-MetadataExchange request-reply. Clients kunnen vervolgens het beleidsdocument verwerken om te bepalen welke bewerkingen in een servicecontract de transactiestroom kunnen ondersteunen of vereisen.

Asserties van transactiestroombeleid zijn van invloed op de transactiestroom door de SOAP-headers op te geven die een client naar een service moet verzenden om een transactie weer te geven. Alle transactieheaders moeten worden gemarkeerd met MustUnderstand gelijk aan true. Elk bericht met een koptekst die anders is gemarkeerd, wordt geweigerd met een SOAP-fout.

Er kan slechts één transactiegerelateerde beleidsverklaring aanwezig zijn voor één bewerking. Beleidsdocumenten met meer dan één transactieverklaring voor een bewerking worden als ongeldig beschouwd en worden geweigerd door WCF. Daarnaast kan slechts één transactieprotocol aanwezig zijn binnen elk poorttype. Beleidsdocumenten met bewerkingen die verwijzen naar meer dan één transactieprotocol binnen één poorttype, worden als ongeldig beschouwd en worden geweigerd door het hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe). Beleidsdocumenten met transactieverklaringen die aanwezig zijn in uitvoerberichten of invoerberichten in één richting, worden ook als ongeldig beschouwd.