Dela via


ServiceModel-transaktionsattribut

Windows Communication Foundation (WCF) innehåller egenskaper för tre standardattribut System.ServiceModel som gör att du kan konfigurera beteendet för transaktioner för en WCF-tjänst:

TransactionFlowAttribute

Attributet TransactionFlowAttribute anger viljan för en åtgärd i ett tjänstkontrakt att acceptera inkommande transaktioner från en klient. Attributet tillhandahåller den här kontrollen med följande egenskap: Transaktioner använder TransactionFlowOption uppräkningen för att ange om en inkommande transaktion är Mandatory, Allowedeller NotAllowed.

Det här är det enda attribut som relaterar tjänståtgärder till externa interaktioner med en klient. Attributen som beskrivs i följande avsnitt gäller användningen av transaktioner i körningen av åtgärden.

ServiceBehaviorAttribute

Attributet ServiceBehaviorAttribute anger det interna körningsbeteendet för en tjänstkontraktsimplementering. Transaktionsspecifika egenskaper för det här attributet är:

  • TransactionAutoCompleteOnSessionClose anger om en transaktion som inte har slutförts ska slutföras när sessionen stängs. Standardvärdet för den här egenskapen är false. Om den här egenskapen är true, och den inkommande sessionen stängdes av korrekt i stället för att stängas på grund av nätverks- eller klientfel, slutförs alla ej slutförda transaktioner. Annars, om den här egenskapen är false eller om sessionen inte stängdes korrekt, återställs alla oavslutade transaktioner när sessionen stängs. Om den här egenskapen är truemåste den inkommande kanalen vara sessionsbaserad.

  • ReleaseServiceInstanceOnTransactionComplete anger om den underliggande tjänstinstansen släpps när en transaktion slutförs. Standardvärdet för den här egenskapen är true. Nästa inkommande meddelande gör att en ny underliggande instans skapas, vilket tar bort alla tillstånd per transaktion som den tidigare instansen kan ha haft. Att släppa en tjänstinstans är en intern åtgärd som tjänsten vidtar och har ingen inverkan på befintliga anslutningar eller sessioner som klienter kan ha upprättat. Den här funktionen motsvarar just-in-time-aktiveringsfunktionen SOM COM+ tillhandahåller. Om egenskapen är truemåste ConcurrencyMode vara lika med Single. I annat fall utlöser tjänsten ett ogiltigt konfigurationsverifieringsfel under starten.

  • TransactionIsolationLevel anger den isoleringsnivå som ska användas för transaktioner inom tjänsten. Den här egenskapen tar ett av IsolationLevel värdena. Om egenskapen för lokal isoleringsnivå är något annat än Unspecifiedmåste isoleringsnivån för en inkommande transaktion matcha inställningen för den här lokala egenskapen. Annars avvisas den inkommande transaktionen och ett fel skickas tillbaka till klienten. Om TransactionScopeRequired är true, och ingen transaktion flödas, avgör den här egenskapen det värde som IsolationLevel ska användas för den lokalt skapade transaktionen. Om IsolationLevel är inställt på Unspecifiedanvänds IsolationLevelSerializable .

  • TransactionTimeout anger den tidsperiod inom vilken en ny transaktion som skapats i tjänsten måste slutföras. Om den här tiden nås och transaktionen inte har slutförts avbryts den. TimeSpan Används som TransactionScope timeout för alla åtgärder som har TransactionScopeRequired angetts till true och för vilka en ny transaktion skapades. Tidsgränsen är den maximala tillåtna varaktigheten från skapandet av transaktionen till slutförandet av fas 1 i tvåfas-incheckningsprotokollet. Tidsgränsvärdet som används är alltid det lägre värdet mellan TransactionTimeout egenskapen och konfigurationsinställningen transactionTimeout .

OperationBehaviorAttribute

Attributet OperationBehaviorAttribute anger beteendet för metoderna i tjänstimplementeringen. Du kan använda den för att ange åtgärdens specifika körningsbeteende. Egenskaperna för det här attributet påverkar inte WSDL-beskrivningen (Web Service Description Language) för tjänstkontraktet och är enbart element i WCF-programmeringsmodellen som gör det möjligt för vanliga funktioner som utvecklare annars måste implementera själva.

Det här attributet har följande transaktionsspecifika egenskaper:

  • TransactionScopeRequired anger om en metod måste köras inom ett aktivt transaktionsomfång. Standardvärdet är false. OperationBehaviorAttribute Om attributet inte har angetts för en metod innebär det också att metoden inte kommer att köras i en transaktion. Om ett transaktionsomfång inte krävs för en åtgärd aktiveras inte alla transaktioner som finns i meddelandehuvudet och förblir som ett element i IncomingMessagePropertiesOperationContexti . Om ett transaktionsomfång krävs för en åtgärd härleds källan för transaktionen från något av följande:

    • Om en transaktion flödas från klienten körs metoden under ett transaktionsomfång som skapats med den distribuerade transaktionen.

    • Med en köad transport används den transaktion som används för att radera meddelandet. Observera att den transaktion som används inte är en flödestransaktion, eftersom den inte tillhandahölls av meddelandets ursprungliga avsändare.

    • En anpassad transport kan tillhandahålla en transaktion med hjälp av TransportTransactionProperty.

    • Om inget av ovanstående innehåller en extern källa för en transaktion skapas en ny Transaction instans omedelbart innan metoden anropas.

  • TransactionAutoComplete anger om transaktionen där metoden körs slutförs automatiskt om inga ohanterade undantag utlöses. Om den här egenskapen är truemarkerar den anropande infrastrukturen automatiskt transaktionen som "slutförd" om användarmetoden returnerar utan att utlösa ett undantag. Om den här egenskapen är falseär transaktionen kopplad till instansen och markeras endast som "slutförd" om klienten anropar en efterföljande metod som är markerad med den här egenskapen lika truemed eller om en efterföljande metod uttryckligen anropar SetTransactionComplete. Det gick inte att utföra något av dessa resultat när transaktionen aldrig "slutfördes" och det inneslutna arbetet har inte checkats in, såvida inte TransactionAutoCompleteOnSessionClose egenskapen har angetts till true. Om den här egenskapen är inställd på truemåste du använda en kanal med en session och InstanceContextMode måste vara inställd på PerSession.