Atributy transakce ServiceModel
Windows Communication Foundation (WCF) poskytuje vlastnosti tří standardních System.ServiceModel atributů, které umožňují konfigurovat chování transakcí pro službu WCF:
TransactionFlowAttribute
Atribut TransactionFlowAttribute určuje ochotu operace ve smlouvě služby přijímat příchozí transakce z klienta. Atribut poskytuje tento ovládací prvek s následující vlastností: Transakce používají TransactionFlowOption výčet k určení, zda příchozí transakce je Mandatory, Allowednebo NotAllowed.
Toto je jediný atribut, který souvisí s operacemi služby s externími interakcemi s klientem. Atributy popsané v následujících částech se vztahují k použití transakcí při provádění operace.
ServiceBehaviorAttribute
Atribut ServiceBehaviorAttribute určuje chování interního spuštění implementace kontraktu služby. Mezi vlastnosti tohoto atributu specifické pro transakce patří:
TransactionAutoCompleteOnSessionClose určuje, zda se má dokončit nedokončená transakce při zavření relace. Výchozí hodnota této vlastnosti je
false
. Pokud jetrue
tato vlastnost a příchozí relace byla řádně vypnuta místo ukončení kvůli chybám sítě nebo klienta, všechny nedokončené transakce se úspěšně dokončily. Jinak pokud jefalse
tato vlastnost nebo pokud relace nebyla řádně uzavřena, všechny nedokončené transakce se vrátí zpět při zavření relace. Pokud jetrue
tato vlastnost , příchozí kanál musí být založený na relaci.ReleaseServiceInstanceOnTransactionComplete Určuje, zda se po dokončení transakce uvolní příslušná instance služby. Výchozí hodnota této vlastnosti je
true
. Další příchozí zpráva způsobí vytvoření nové základní instance a zahodí všechny stavy jednotlivých transakcí, které by předchozí instance mohla uchovávat. Uvolnění instance služby je interní akce, kterou služba provede, a nemá žádný vliv na existující připojení nebo relace, které mohou klienti navázat. Tato funkce je ekvivalentní funkci modelu COM+ za běhu. Pokud jetrue
vlastnost , ConcurrencyMode musí být rovna Single. V opačném případě služba při spuštění vyvolá neplatnou výjimku ověření konfigurace.TransactionIsolationLevel určuje úroveň izolace, která se má použít pro transakce v rámci služby; tato vlastnost přebírá jednu z IsolationLevel hodnot. Pokud je vlastnost místní úrovně izolace cokoli jiného než Unspecified, úroveň izolace příchozí transakce musí odpovídat nastavení této místní vlastnosti. V opačném případě je příchozí transakce odmítnuta a chyba se odešle zpět klientovi. Pokud TransactionScopeRequired je
true
a žádná transakce není tok, tato vlastnost určuje IsolationLevel hodnotu, která se má použít pro místně vytvořenou transakci. Pokud IsolationLevel je nastavená hodnota Unspecified, IsolationLevelSerializable použije se.TransactionTimeout určuje časové období, během kterého se musí dokončit nová transakce vytvořená ve službě. Pokud se tento čas dosáhne a transakce nebyla dokončena, přeruší se. Slouží TimeSpan jako TransactionScope časový limit pro všechny operace, které jsou nastaveny TransactionScopeRequired
true
a pro které byla vytvořena nová transakce. Časový limit je maximální povolená doba trvání od vytvoření transakce do dokončení fáze 1 v protokolu dvoufázového potvrzení. Použitá hodnota časového limitu je vždy nižší hodnotou mezi TransactionTimeout vlastností atransactionTimeout
nastavením konfigurace.
OperationBehaviorAttribute
Atribut OperationBehaviorAttribute určuje chování metod v implementaci služby. Můžete ho použít k označení konkrétního chování operace při provádění. Vlastnosti tohoto atributu nemají vliv na popis jazyka WSDL (Web Service Description Language) kontraktu služby a jsou čistě prvky programovacího modelu WCF, které umožňují běžné funkce, které vývojáři jinak musí implementovat sami.
Tento atribut má následující vlastnosti specifické pro transakce:
TransactionScopeRequired určuje, zda se metoda musí provést v rámci aktivního oboru transakce. Výchozí hodnota je
false
. OperationBehaviorAttribute Pokud atribut není nastaven pro metodu, znamená to také, že metoda nebude provádět v transakci. Pokud obor transakce není vyžadován pro operaci, žádná transakce, která je přítomna v záhlaví zprávy, není aktivována a zůstává jako prvek IncomingMessagePropertiesOperationContext. Pokud je pro operaci vyžadován obor transakce, zdroj transakce je odvozen z jedné z následujících:Pokud transakce je tok z klienta, metoda se provede v rámci oboru transakce vytvořeného pomocí této distribuované transakce.
Při přenosu ve frontě se používá transakce použitá k vyřazení fronty zprávy. Všimněte si, že použitá transakce není tok transakce v tom, že nebyla poskytována původním odesílatelem zprávy.
Vlastní přenos může poskytnout transakci prostřednictvím použití
TransportTransactionProperty
.Pokud žádná z výše uvedených možností neposkytuje externí zdroj pro transakci, vytvoří se nová Transaction instance bezprostředně před voláním metody.
TransactionAutoComplete určuje, zda transakce, ve které se metoda spouští, je automaticky dokončena, pokud nejsou vyvolány žádné neošetřené výjimky. Pokud je
true
tato vlastnost , volající infrastruktura automaticky označí transakci jako "dokončeno", pokud metoda uživatele vrátí bez vyvolání výjimky. Pokud jefalse
tato vlastnost , transakce je připojena k instanci a je označena pouze jako "dokončeno", pokud klient volá následnou metodu, která je označena touto vlastností rovnátrue
, nebo pokud následná metoda explicitně volá SetTransactionComplete. Nelze provést některý z těchto výsledků v transakci nikdy "dokončena", a obsažená práce není potvrzena, pokud TransactionAutoCompleteOnSessionClose není vlastnost nastavena natrue
. Pokud je tato vlastnost nastavena natrue
, musíte použít kanál s relací a InstanceContextMode musí být nastaven na PerSession.