Sdílet prostřednictvím


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 je truetato 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 je false 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 je truetato 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 je truevlastnost , 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 truea žá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 TransactionScopeRequiredtrue 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í a transactionTimeout 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 truetato vlastnost , volající infrastruktura automaticky označí transakci jako "dokončeno", pokud metoda uživatele vrátí bez vyvolání výjimky. Pokud je falsetato 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 na true. Pokud je tato vlastnost nastavena na true, musíte použít kanál s relací a InstanceContextMode musí být nastaven na PerSession.