Povolení toku transakcí

Windows Communication Foundation (WCF) poskytuje vysoce flexibilní možnosti pro řízení toku transakcí. Nastavení toku transakcí služby lze vyjádřit pomocí kombinace atributů a konfigurace.

Nastavení toku transakcí

Nastavení toku transakcí se vygeneruje pro koncový bod služby v důsledku průniku následujících tří hodnot:

  • Atribut TransactionFlowAttribute zadaný pro každou metodu ve smlouvě o poskytování služeb.

  • Vlastnost vazby TransactionFlow v konkrétní vazbě.

  • Vlastnost vazby TransactionFlowProtocol v konkrétní vazbě. Vlastnost TransactionFlowProtocol vazby umožňuje zvolit mezi dvěma různými transakčními protokoly, které můžete použít k toku transakce. Následující části stručně popisují každý z nich.

Protokol WS-AtomicTransaction

Protokol WS-AtomicTransaction (WS-AT) je užitečný pro scénáře, kdy je vyžadována interoperabilita se zásobníky protokolů třetích stran.

OleTransactions Protocol

Protokol OleTransactions je užitečný pro scénáře, kdy není vyžadována interoperabilita se zásobníky protokolů třetích stran a nasazující služba předem ví, že služba protokolu WS-AT je zakázaná místně nebo stávající síťová topologie nepodporuje použití WS-AT.

Následující tabulka ukazuje různé typy toků transakcí, které je možné vygenerovat pomocí těchto různých kombinací.

Transactionflow

vazba
Vlastnost vazby TransactionFlow Protokol vazby TransactionFlowProtocol Typ toku transakce
Povinné true WS-AT Transakce musí být tok v interoperabilním formátu WS-AT.
Povinné true OleTransactions Transakce musí být tok ve formátu WCF OleTransactions.
Povinné false (nepravda) Nelze použít Nelze použít, protože se jedná o neplatnou konfiguraci.
Povoleno true WS-AT Transakce může být tok v interoperabilním formátu WS-AT.
Povoleno true OleTransactions Transakce může být tok ve formátu WCF OleTransactions.
Povoleno false (nepravda) Libovolná hodnota Transakce není tokována.
NotAllowed Libovolná hodnota Libovolná hodnota Transakce není tokována.

Následující tabulka shrnuje výsledek zpracování zpráv.

Příchozí zpráva Nastavení TransactionFlow Hlavička transakce Výsledek zpracování zpráv
Transakce odpovídá očekávanému formátu protokolu. Povolené nebo povinné MustUnderstandtruerovná se . Zpracovat
Transakce neodpovídá očekávanému formátu protokolu Povinné MustUnderstandfalserovná se . Odmítnuto, protože je vyžadována transakce
Transakce neodpovídá očekávanému formátu protokolu Povoleno MustUnderstandfalserovná se . Odmítnuto, protože záhlaví není srozumitelné.
Transakce s použitím libovolného formátu protokolu NotAllowed MustUnderstandfalserovná se . Odmítnuto, protože záhlaví není srozumitelné.
Žádná transakce Povinné Odmítnuto, protože je vyžadována transakce
Žádná transakce Povoleno Zpracovat
Žádná transakce NotAllowed Zpracovat

I když každá metoda kontraktu může mít různé požadavky na tok transakcí, nastavení protokolu toku transakce je vymezeno na úrovni vazby. To znamená, že všechny metody, které sdílejí stejný koncový bod (a tedy stejnou vazbu), také sdílejí stejné zásady, které umožňují nebo vyžadují tok transakcí, a také stejný transakční protokol, pokud je to možné.

Povolení toku transakcí na úrovni metody

Požadavky na tok transakcí nejsou vždy stejné pro všechny metody ve smlouvě o poskytování služeb. WCF proto také poskytuje mechanismus založený na atributech, který umožňuje vyjádřit předvolby toku transakcí jednotlivých metod. Toho dosáhnete TransactionFlowAttribute tím, že určuje úroveň, ve které operace služby přijímá hlavičku transakce. Pokud chcete povolit tok transakcí, měli byste označit metody kontraktu služby pomocí tohoto atributu. Tento atribut přebírá jednu z hodnot výčtu TransactionFlowOption , ve kterém je NotAllowedvýchozí hodnota . Pokud je zadána jakákoli hodnota s výjimkou NotAllowed , je nutné, aby metoda nebyla jednosměrná. Vývojář může tento atribut použít k určení požadavků na tok transakcí na úrovni metody nebo omezení v době návrhu.

Povolení toku transakcí na úrovni koncového bodu

Kromě nastavení TransactionFlowAttribute toku transakce na úrovni metody poskytuje wcf nastavení pro tok transakcí na úrovni koncového bodu, které správcům umožňuje řídit tok transakcí na vyšší úrovni.

Toho dosáhnete TransactionFlowBindingElementpomocí funkce , která umožňuje povolit nebo zakázat příchozí tok transakce v nastavení vazby koncového bodu a také určit požadovaný formát transakčního protokolu pro příchozí transakce.

Pokud vazba zakázala tok transakce, ale jedna z operací kontraktu služby vyžaduje příchozí transakci, při spuštění služby se vyvolá výjimka ověření.

Většina trvalých vazeb WCF obsahuje transactionFlow a transactionProtocol atributy, které vám umožní nakonfigurovat konkrétní vazbu pro příjem příchozích transakcí. Další informace o nastavení elementů konfigurace naleznete v tématu vazby>.<

Správce nebo nasazér může pomocí toku transakcí na úrovni koncového bodu nakonfigurovat požadavky na tok transakcí nebo omezení v době nasazení pomocí konfiguračního souboru.

Zabezpečení

Chcete-li zajistit zabezpečení a integritu systému, je nutné zabezpečit výměny zpráv při toku transakcí mezi aplikacemi. Neměli byste tokovat ani zpřístupňovat podrobnosti o transakcích žádné aplikaci, která nemá nárok na účast ve stejné transakci.

Při generování klientů WCF do neznámých nebo nedůvěryhodných webových služeb pomocí výměny metadat by volání operací na těchto webových službách měla v případě potřeby potlačit aktuální transakci. Následující příklad demonstruje, jak to udělat.

//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  

Kromě toho by měly být služby nakonfigurované tak, aby přijímaly příchozí transakce pouze od klientů, které ověřili a autorizovali. Příchozí transakce by měly být přijaty pouze v případě, že pocházejí z vysoce důvěryhodných klientů.

Kontrolní výrazy zásad

WCF používá kontrolní výrazy zásad k řízení toku transakcí. Kontrolní výrazy zásad najdete v dokumentu zásad služby, který je generován agregací kontraktů, konfigurace a atributů. Klient může získat dokument zásad služby pomocí http GET nebo WS-MetadataExchange request-reply. Klienti pak můžou dokument zásad zpracovat a určit, které operace na kontraktu služby mohou podporovat nebo vyžadovat tok transakcí.

Kontrolní výrazy zásad toku transakcí ovlivňují tok transakcí zadáním hlaviček PROTOKOLU SOAP, které má klient odeslat do služby, aby představoval transakci. Všechny hlavičky transakcí musí být označeny MustUnderstand rovna true. Všechny zprávy s hlavičkou označenou jinak se zamítnou chybou SOAP.

V jedné operaci může existovat pouze jeden kontrolní výraz zásad souvisejících s transakcemi. Dokumenty zásad s více než jedním kontrolním výrazem transakce u operace jsou považovány za neplatné a jsou odmítnuty WCF. Kromě toho může být uvnitř každého typu portu přítomn pouze jeden transakční protokol. Dokumenty zásad s operacemi odkazujícími na více než jeden transakční protokol uvnitř jednoho typu portu jsou považovány za neplatné a nástroj ServiceModel Metadata Utility Tool (Svcutil.exe). Dokumenty zásad s transakčními kontrolními výrazy, které jsou přítomné na výstupních zprávách nebo jednosměrných vstupních zprávách, jsou také považovány za neplatné.