Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 jako výsledek průniku následujících tří hodnot.
Atribut TransactionFlowAttribute zadaný pro každou metodu ve smlouvě o poskytování služeb.
Vlastnost vazby
TransactionFlowv konkrétní vazbě.Vlastnost vazby
TransactionFlowProtocolv konkrétní vazbě. VlastnostTransactionFlowProtocolvazby 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 Protokol
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 nasazovač služby 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 závazný |
Vlastnost vazby pro TransactionFlow | Protokol vazby TransactionFlowProtocol | Typ toku transakce |
|---|---|---|---|
| Povinné | pravda | WS-AT | Transakce musí probíhat v interoperabilním formátu WS-AT. |
| Povinné | pravda | OleTransactions | Transakce musí probíhat ve formátu WCF OleTransactions. |
| Povinné | Nepravda | Není relevantní | Nelze použít, protože se jedná o neplatnou konfiguraci. |
| Povoleno | pravda | WS-AT | Transakce může být zpracována ve formátu WS-AT, který je interoperabilní. |
| Povoleno | pravda | OleTransactions | Transakce mohou být zpracovány ve formátu WCF OleTransactions. |
| Povoleno | Nepravda | Libovolná hodnota | Transakce není zpracována. |
| Není povoleno | Libovolná hodnota | Libovolná hodnota | Transakce není zpracová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 rovná se true. |
Proces |
| Transakce neodpovídá očekávanému formátu protokolu | Povinné |
MustUnderstand rovná se false. |
Odmítnuto, protože je vyžadována transakce |
| Transakce neodpovídá očekávanému formátu protokolu | Povoleno |
MustUnderstand rovná se false. |
Odmítnuto, protože záhlaví není srozumitelné. |
| Transakce s použitím libovolného formátu protokolu | Není povoleno |
MustUnderstand rovná se false. |
Odmítnuto, protože záhlaví není srozumitelné. |
| Žádná transakce | Povinné | není k dispozici | Odmítnuto, protože je vyžadována transakce |
| Žádná transakce | Povoleno | není k dispozici | Proces |
| Žádná transakce | Není povoleno | není k dispozici | Proces |
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. TransactionFlowAttribute určuje úroveň, ve které operace služby přijímá hlavičku transakce. Tím se dosáhne požadovaného výsledku. 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.
Tohoto je dosaženo pomocí TransactionFlowBindingElement, které umožňuje povolit nebo zakázat tok příchozích transakcí v nastavení vazby koncového bodu a určovat 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.
Bezpečnost
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 vytváření klientů WCF pro neznámé nebo nedůvěryhodné webové služby pomocí výměny metadat by měla volání operací na těchto webových službách, pokud je to možné, potlačit aktuální transakci. Následující příklad ukazuje, jak to provést.
//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ů.
Prohlášení o zásadách
WCF používá zásady k řízení toku transakcí. Prohlášení o zásadách lze najít v dokumentu zásad služby, který je generován agregací smluv, konfigurace a atributů. Klient může získat dokument zásad služby pomocí HTTP GET nebo požadavku a odpovědi WS-MetadataExchange. Klienti pak můžou dokument zásad zpracovat a určit, které operace na kontraktu služby mohou podporovat nebo vyžadovat tok transakcí.
Zásady transakčního toku ovlivňují tok transakcí zadáním hlaviček protokolu SOAP, které by měl klient odeslat do služby za účelem reprezentace transakce. Všechny hlavičky transakcí musí mít MustUnderstand rovné true. Všechny zprávy s hlavičkou označenou jinak se zamítnou chybou SOAP.
Na jednu operaci může být přítomno pouze jedno prohlášení zásad související s transakcemi. Dokumenty zásad s více než jedním transakčním tvrzením u operace jsou považovány za neplatné a odmítne je služba WCF. Kromě toho může být uvnitř každého typu portu přítomn pouze jeden transakční protokol. Dokumenty zásad, které obsahují operace odkazující 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) je odmítá. Dokumenty politiky s transakčními tvrzeními, které se vyskytují ve výstupních nebo jednosměrných vstupních zprávách, jsou také považovány za neplatné.