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ě. VlastnostTransactionFlowProtocol
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é | MustUnderstand true rovná se . |
Zpracovat |
Transakce neodpovídá očekávanému formátu protokolu | Povinné | MustUnderstand false rovná se . |
Odmítnuto, protože je vyžadována transakce |
Transakce neodpovídá očekávanému formátu protokolu | Povoleno | MustUnderstand false rovná se . |
Odmítnuto, protože záhlaví není srozumitelné. |
Transakce s použitím libovolného formátu protokolu | NotAllowed | MustUnderstand false rovná 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é.