Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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. Egenskaperna som beskrivs i följande avsnitt gäller användningen av transaktioner vid utförandet 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 ärtrue
, och den inkommande sessionen stängdes ner smidigt i stället för att avslutas på grund av nätverks- eller klientfel, slutförs varje ej slutförd transaktion framgångsrikt. Annars, om den här egenskapen ärfalse
eller om sessionen inte stängdes korrekt, återställs alla oavslutade transaktioner när sessionen stängs. Om den här egenskapen ärtrue
må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 ärtrue
må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 operationer som har TransactionScopeRequired inställt till
true
och för vilka en ny transaktion har skapats. 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ällningentransactionTimeout
.
Attribut för operationsbeteende
Attributet OperationBehaviorAttribute anger beteendet för metoderna i tjänstimplementeringen. Du kan använda den för att ange operationens specifika exekveringsbeteende. 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 ingen transaktion som finns i meddelandehuvudet och förblir som ett element i IncomingMessageProperties i OperationContext. 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 kommer från klienten körs metoden inom ramen för ett transaktionsomfång som skapats med den distribuerade transaktionen.
Med en köad transport används den transaktion som används för att avköa 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 erbjuda en transaktion genom användning 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
true
markerar den anropande infrastrukturen automatiskt transaktionen som "slutförd" om användarmetoden returnerar utan att utlösa ett undantag. Om den här egenskapen ärfalse
ä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 likatrue
med eller om en efterföljande metod uttryckligen anropar SetTransactionComplete. Det går inte att utföra något av dessa, vilket resulterar i att transaktionen aldrig "slutförs", och det inneslutna arbetet inte har bekräftats, såvida inte TransactionAutoCompleteOnSessionClose-egenskapen har angetts tilltrue
. Om den här egenskapen är inställd påtrue
måste du använda en kanal med en session och InstanceContextMode måste vara inställd på PerSession.