Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Tranzakciók kezelése a WCF- ben. Bevezetés A tranzakció egy olyan logikai egység, amely több elemi lépést úgy fog össze, hogy azok vagy mind sikeresen.

Hasonló előadás


Az előadások a következő témára: "Tranzakciók kezelése a WCF- ben. Bevezetés A tranzakció egy olyan logikai egység, amely több elemi lépést úgy fog össze, hogy azok vagy mind sikeresen."— Előadás másolata:

1 Tranzakciók kezelése a WCF- ben

2 Bevezetés A tranzakció egy olyan logikai egység, amely több elemi lépést úgy fog össze, hogy azok vagy mind sikeresen lezajlanak, vagy mind elbuknak. Pl.: banki átutalás két lépése: –pénz leemelése a forrásszámláról –pénz jóváírása a célszámlára Ha nem egyszerre sikeresek, valaki rosszul jár.

3 Bevezetés Ha a tranzakcióban szereplő összes utasítás sikeresen lezajlik → commit Ha legalább az egyik nem sikeres → rollback Rollback esetén a már lezajlott műveletek inverz párját kell elvégezni, hogy minden a kezdeti állapotba állhasson vissza

4 Bevezetés Ilyen logikát megvalósító algoritmus (bármilyen problémára) hagyományos módon is készíthető Azonban a programozók megsegítésére ez az eszköz be van építve a WCF keretrendszerbe

5 Áttekintés Az alábbi tulajdonságokkal rendelkeznek: –Atomiság –Konzisztencia őrzés –Izoláció –Tartósság

6 Áttekintés atomiság Az atomiság arra vonatkozik, hogy a műveletcsoportot kell egy bonthatatlan egységnek tekinteni. A szabály szerint vagy minden részművelet sikeresen lezajlik és a hatásuk végleges, vagy mindegyikük elbukik és a rollback végrehajtódik.

7 Áttekintés konzisztencia őrzés Ez a feltétel garantálja, hogy a tranzakció lezajlása után konzisztens állapotból konzisztens állapotba kerüljön a rendszer. Ha pl. egy bank egyik számlájáról egy másikra emelünk át pénzt, akkor az átutalás után a banknak ugyanannyi pénze kell, hogy maradjon.

8 Áttekintés izoláció Megakadályozza, hogy egy félkész (komittálatlan) tranzakció által ideiglenesen létrehozott inkonzisztens állapotot egy másik tranzakció megfigyelhesse. Továbbá meggátolja, hogy két folyamatban lévő tranzakció egymásra hatást gyakoroljon.

9 Áttekintés tartósság Egy kommittált tranzakció hatása: –vissza nem vonható –esetleges meghibásodásoktól a lehetőségekhez mérten védett

10 Áttekintés A WCF támogatja a WS-Atomic Transaction (WS-AT) protokollt, amely lehetővé teszi a tranzakciók áramoltatását együttműködő programok között Létezik támogatás az OLE Transactions protokollhoz is (az OLE Transactions a Microsoft interface szabványa a tranzakciók kezeléséhez.)

11 Áttekintés Konfigurációs fájlban állítható be, hogy: –igényeljük-e tranzakciókat, –milyen típusút használnánk, –külön-külön time-out értékeket állíthatunk be minden szolgáltatási szinthez

12 Áttekintés A tranzakciók attribútumai a System. ServiceModel névtérben a következő lehetőségeket nyújtja:System. ServiceModel –time-out-ok és izolációs szintek beállítása a ServiceBehaviorAttribute attribútummal, ServiceBehaviorAttribute –tranzakciók funkcionalitásának és viselkedésének beállítása a OperationBehaviorAttribute attribútummal,OperationBehaviorAttribute –a ServiceContractAttribute és az OperationContract- Attribute segítségével a Contract-ot megvalósító metódusban igényelhetjük; engedélyezhetjük; vagy megtagadhatjuk a tranzakciók áramoltatásátServiceContractAttributeOperationContract- Attribute

13 Tranzakció-modellek Három fajta modell: –Windows Communication Foundation Transactions (WCFT) –System.Transactions Transactions (STT) –MSDTC Transactions (MSDTC)

14 Tranzakció-modellek WCFT Tranzakcióval támogatott szolgáltatások írását teszi lehetővé WS-AtomicTransaction (WS-AT) támogatás Egy program, amely WCFT-t használ, kommunikálhat másik WCF szolgáltatással, vagy akár third-party technológiákkal

15 Tranzakció-modellek WCFT Egy WCF szolgáltatást megvalósító programban a WCFT segítségével definiálható, hogy pontosan hogyan, és mikor jöjjön létre a tranzakció-struktúra, továbbá képes azokat végrehajtani illetve szinkronizálni

16 Tranzakció-modellek STT A System.Transactions névtér két modellt ötvöz:System.Transactions –egy explicit programmodellt a Transaction osztály támogatásával, illetveTransaction –implicit lehetőségeket nyújt a TransactionScope osztály, amellyel az elkészített struktúrát könnyen tranzakcióként lehet kezelni TransactionScope

17 Tranzakció-modellek STT A System.Transactions egy WCF szolgáltatásban olyan programmodell létrehozását támogatja, mellyel egy tranzakciót a kliensben hozhatjuk létreSystem.Transactions Ez a tranzakció külön kérés nélkül, explicit módon intézhet kéréseket a szolgáltatást megvalósító programtól (ha szükséges)

18 Tranzakció-modellek MSDTC Az MSDTC egy tranzakció manager, amely elosztott tranzakciók kezeléséhez nyújt segítséget. Támogatást ad mind a szolgáltató, mind a kliens oldalán a létrehozott tranzakciók kezeléséhez.

19 Tranzakció attribútumok Három standard System.ServiceModel attribútum a tranzakciók konfigurálására:System.ServiceModel –TransactionFlowAttributeTransactionFlowAttribute –ServiceBehaviorAttributeServiceBehaviorAttribute –OperationBehaviorAttributeOperationBehaviorAttribute

20 TransactionFlowAttribute Egy eljárás klienstől érkező, bejövő tranzakció-fogadási hajlandóságát definiálja Az attribútum a kontrollt a TransactionFlowOption tulajdonság értékének beállításával valósítja meg. A felvehető értékek: Mandatory, Allowed, vagy NotAllowed TransactionFlowOption

21 TransactionFlowAttribute Ez az egyetlen attribútum ami a kiszolgálói műveleteket hozzárendeli a külső klienssel történő érintkezésekhez. A következő részben ismertetett tulajdonságok a művelet végrehajtása közbeni tranzakciók alkalmazásához kapcsolódnak.

22 ServiceBehaviorAttribute Definiálja a külső futtatás viselkedését a service contract-ben Az alábbi speciális paraméterei vannak: –TransactionAutoCompleteOnSessionCloseTransactionAutoCompleteOnSessionClose –ReleaseServiceInstanceOnTransactionCompleteReleaseServiceInstanceOnTransactionComplete –TransactionIsolationLevelTransactionIsolationLevel –TransactionTimeoutTransactionTimeout

23 ServiceBehaviorAttribute TransactionAutoCompleteOnSessionClose Automatikusan befejez egy befejezetlen tranzakciót, ha be van állítva Default: false Ha true-ra állítjuk és bármilyen okból a kapcsolat a tranzakció commitálódása előtt megszakad, akkor a tranzakciót megpróbálja teljesíteni. Ha false, akkor hiba esetén (a logikusabb) rollback-et hajtja végre Csak akkor lehet true, ha a kapcsolat session-orientált

24 ServiceBehaviorAttribute ReleaseDerviceInstanceOnTransactionComplete Meghatározza, hogy elengedje-e az erőforrásokat, ha a tranzakció befejeződött Default: true Egy új bejövő kérés egy új mögöttes példányt hozat létre, függetlenül attól, hogy az előző tranzakció fenntartott-e erőforrást, vagy sem A szolgáltató-példány felszabadítása a szerver belső művelete, és nem érint semmilyen egyéb példányt sem, amit a kliens hozatott létre

25 ServiceBehaviorAttribute TransactionIsolationLevel (ahogy sejthető) az izoláció szintjét határozza meg a szolgáltatónál Az attribútum értékének az IsolationLevel osztály statikus változói közül kell választaniIsolationLevel Ha a helyi izolációs szint különbözik az Unspecified-től, akkor minden bejövő tranzakció izolációs szintje meg kell, hogy egyezzen a helyileg beállított értékkel.

26 ServiceBehaviorAttribute TransactionIsolationLevel Ha ez nem teljesül, akkor a bejövő tranzakció elutasításra kerül, majd a sikertelenségről a kliens is értesül. Ha a TransactionScopeRequired igaz és nincs tranzakció folyamatban, akkor ez a tulajdonság határozza meg az izolációs szintet, amit a helyileg létrehozott tranzakciókban kell használni.TransactionScopeRequired

27 ServiceBehaviorAttribute TransactionIsolationLevel Ha az izolációs szint Unspecified-re van állítva, akkor a Serializable kerül használatra

28 ServiceBehaviorAttribute TransactionTimeout Az a lejárati idő adható meg vele, hogy az új tranzakcióknak mennyi idejük van a commit- álásra Ha egy félkész tranzakció esetében lejár az időkorlát, akkor automatikusan abortálódik Az időkorlát értéke nem haladhatja meg azt az időt, mely a tranzakicó létrehozásától, annak végrehajtásáig terjed (1 lefutás esetén) egy kétfázisos nyugtázási protokoll esetén

29 ServiceBehaviorAttribute TransactionTimeout Az időkorlát értéke mindig a –TransactionTimeout és a –transactionTimeout beállítások közül a kisebb lesz.

30 OperationBehaviorAttribute Egy metódus viselkedését határozza meg a szolgáltatói oldalon A műveletek végrehajtásának viselkedését lehet jelezni vele Értékének beállítása nincs hatással a Web Service Description Language (WSDL) service contract leírására fontos, gyakran használatos feature-ket valósít meg

31 OperationBehaviorAttribute TransactionScopeRequired Meghatározza, hogy egy metódus egy aktív tranzakció hatókörébe esik-e Default: false Ha az OperationBehaviorAttribute nincs beállítva egy metódushoz, akkor ez azt is jelenti, hogy ez a metódus nem tartozik tranzakcióhoz

32 OperationBehaviorAttribute TransactionScopeRequired Ha egy tranzakció hatáskör követel egy műveletet (végrehajtás szempontjából), akkor a tranzakció forrása a következő négy valamelyike lesz: 1.: Ha a tranzakció a klienstől indul, az eljárás a tranzakció hatáskörén belül jön létre, elosztott tranzakciók felhasználásával 2.: Egy sorszámozott átvitelnél a tranzakció visszafejti az üzenetsort. (Fontos, hogy ebben az esetben a tranzakció nem adatáramként továbbítódik)

33 OperationBehaviorAttribute TransactionScopeRequired 3.: Egyéni továbbítási mód céljából a TransportTransactionProperty értékét kell állítani 4.: Ha az első 3 nem teljesül, akkor egy új Transaction példány jön létre a hívó metódus függvényében Transaction

34 OperationBehaviorAttribute TransactionAutoComplete Meghatározza, hogy az ügylet, amelyben a metódus fut, automatikusan befejeződik, ha nem dobódnak lekezeletlen kivételek Ha true, és nem keletkezett kivétel, akkor a hívó eljárás automatikusan sikeresnek jelöli meg a tranzakciót Ha false, akkor a tranzakció a példányhoz csatolódik és csak akkor jelöli meg sikeresként, egy additívan meghívott metódus beszámol a tranzakció szolgáltató oldali sikeres lefutásáról, vagy ha ez a metódus explicite hívja meg a SetTransactionComplete eljárást.SetTransactionComplete

35 OperationBehaviorAttribute TransactionAutoComplete Ha bármelyik előbbi eljárás elbukik: –a tranzakció sohasem lesz sikeresként megjelölve, –a benne foglalt lépések kommittálatlanok maradnak, hacsak a TransactionAutoCompleteOnSessionClose attribútum nem lett megelőzőleg igazra állítva (ha igazra lett állítva az InstanceContextMode a PerSession értéket kell, hogy felvegye)

36 ServiceModel Transaction Configuration Három attribútum a tranzakciók szolgáltatássá való konfigurálására: –transactionFlow, –transactionProtocol, és –transactionTimeout.

37 transactionFlow beállítása A legtöbb előre definiált WCF kötés (binding) tartalmazza a transactionFlow és transactionProtocol attribútumokat A kötés beállítható úgy, hogy a bejövő tranzakciókat egy bizonyos endponint számára a meghatározott transactionFlow protokoll alapján kezelje A fenti két elemmel egyedi kötések készíthetőek

38 transactionFlow beállítása A transactionFlow attribútum definiálja, hogy egy tranzakció egy szolgáltatás végponton keresztül annak kötését használva adatfolyamként működjön-e

39 transactionProtocol beállítása Definiálja a tranzakció protokollt, hogy hogyan használja a szolgáltató endpoint- jait (amik pedig a kötéseket használják) A következő konfigurációs rész egy meghatározott kötéshez kapcsol egy adatfolyam típusú tranzakciót és a WS- AtomicTransaction protocoll használatát

40 transactionProtocol beállítása

41 transactionTimeout beállítása

42 transactionTimeout beállítása A transactionTimeout határozza meg azt az időperiódust, amely alatt a tranzakciónak le kell zajlania A rá vonatkozó kritériumokat már láttuk... Értékében a legkisebb az összes time-out típusú tulajdonság közül

43 ADATFOLYAMOK A WCF nagyon rugalmas beállítási lehetőségeket kínál a tranzakció adatfolyammá történő beállítására A konfigurálás itt is attribútumokon keresztül történik

44 Adatfolyam beállítások A tranzakció beállítások az alábbi három érték együttesével: –A TransactionFlowAttribute meghatározott minden metódus számára a service contract-ban –A TransactionFlow binding tulajdonság a meghatározott kötésben –A TransactionFlowProtocol engedélyezi, hogy két különböző tranzakció protokoll közül válasszunk, amelyet az adatáram a tranzakcióhoz használ. A következőkben ezekről lesz szó.

45 Adatfolyam beállítások WS-AtomicTransaction protokoll Olyan scenairo-k számára hasznos, amikor egy műveletek közötti protokoll- stack használata elkerülhetetlen (műveletek közötti: saját protokoll egy third-party protokollal való kommunikációja)

46 Adatfolyam beállítások OleTransaction protokoll Olyan scenairo-k számára hasznos, amikor a WS-AT-nél jellemző protokoll- stack nem szükséges, és a szolgáltatás fejlesztője tudja, hogy a WS-AT szolgáltatás helyileg tiltott, vagy egy létező hálózati topológia nem képes támogatni a WS-AT-t.

47 Adatfolyam beállítások WS-AT vs. OleT TransactionFlow binding TransactionFlow binding property TransactionFlowProtocoll binding protocol Type of transaction flow MandatorytrueWS-ATA tranzakció csak együttműködő (interoperable) WS-AT formátumban folyhat MandatorytrueOleTA tr. csak a WCF OleT formátumban folyhat MandatoryfalseNem alkalmazhatóNem alkalmazható, mert ez egy helytelen konfiguráció AllowedtrueWS-ATA tr. valószínűleg WS- AT formátumban folyik

48 Adatfolyam beállítások WS-AT vs. OleT TransactionFlow binding TransactionFlow binding property TransactionFlowProtocoll binding protocol Type of transaction flow AllowedtrueOleTA tr. valószínűleg WCF OleT formátumú AllowedfalseBármilyen értékA tr. nem áramolhat NotAllowedBármilyen érték A tr. nem áramolhat

49 Adatfolyam beállítások üzenet feldolgozási eredmények Bejövő üzenetTransactionFlow setting Transaction headerMessage provessing result A tr. egyezik az elvárt protokoll- formával Allowed vagy Mandatory MustUnderstand == trueFeldolgozás A tr. nem egyezik meg MandatoryMustUnderstand == falseElutasítva, mert szükség van egy tr.-ra A tr. nem egyezik meg AllowedMustUnderstand == falseElutasítva, mert a header nem érthető A tr. bármilyen pr. formátumot használ NotAllowedMustUnderstand == falseElutasítva, mert a header nem érthető Nincs tr.Mandatory-Elutasítva, mert tr. kell Nincs tr.Allowed-Feldolgozás Nincs tr.NotAllowed-Feldolgozás

50 Adatfolyam beállítások Amíg minden metódus a szerződésben kaphat különböző tranzakció folyam követelményeket, a tranzakció folyam protokoll beállítása a binding szintjére terjed ki. Ez azt jelenti, hogy minden metódus, amit ugyanazon a végponton osztozik (amiből az is következik, hogy ugyanazon a binding-on), szintén osztozik ugyanazon a politikán, amely engedélyezi, vagy igényli az adatfolyamot (ugyanúgy, mint a közös tranzakció protokollt).

51 Adatfolyam engedélyezése metódus szinten Az adatfolyam előkövetelményei nem mindig egyeznek meg az összes metódus számára a service contract-ban Minden metódushoz saját folyamszabály- zás készíthető Ez a TransactionFlowAttribute által érhető el, mely definiál egy szintet, amelyben egy szolgáltató művelet egy tranzakció header-t fogad

52 Adatfolyam engedélyezése metódus szinten A fejlesztőnek meg kell jelölnie a szolgáltatásának a contract-ot megvalósító metódusát ezzel az attribútummal, ha engedélyezni szeretné a tr. adatáramlását Ez az attribútum a TransactionFlowOption nevű enumerációs struktúrából választhat magának értéket Default: NotAllowed

53 Adatfolyam engedélyezése metódus szinten Ha nem NotAllowed az értéke, akkor az adott metódus nem lehet egyirányú A fejlesztő ezt az attribútumot használhatja a metódus-szintű adatfolyam előkövetelményeinek vagy korlátozásainak meghatározására

54 Adatfolyam engedélyezése endpoint szinten A metódus-szintű adatfolyam beállítási lehetőséget kibővítve a TransactionFlow- Attribute és a WCF lehetőséget ad egy végpontokra definiálható konfigurációt, hogy az adminisztrátorok magasabb szinten tudják kezelni a tranzakciókat. Ezt a TransactionFlowBindingElemet teszi lehetővé, mellyel engedélyezni, vagy letiltani lehet a bejövő adatfolyamot egy endpoint binding beállításában

55 Adatfolyam engedélyezése endpoint szinten Ha a kötés tiltja az adatfolyamokat, de az egyik művelet a service contract-ban egy bejövő tranzakciót igényel, akkor egy kivétel dobódik még a szolgáltatás indításakor A legtöbb WCF által biztosított hagyományos kötés tartalmazza a transactionFlow és transactionProtocol attraibútumokat, amelyek lehetővé teszik a kötés beállítását a bejövő tranzakciók fogadására Egy admin, vagy egy fejlesztő tehát arra használhatja a tranzakciós adatfolyamokat, hogy beállítsa az adatáram előkövetelményeit, vagy korlátait a fejlesztéskor - a konfigurációs fájl használva

56 Biztonság A tranzakciók adatfolyamában az üzenetek kódoltságáról gondoskodni kell A tranzakciókban folyó adatokat, vagy annak részleteit olyan kívülálló entitásnak nem szabad látnia Ha egy WCF kliens ismeretlen, vagy megbízhatatlan web-szolgáltatáson ke-resztül küld adatokat, a hívó műveleteknek ezen a web- szolgáltatáson - ha lehetséges - el kell nyomniuk az aktuális tranzakciót. A következő példa azt mutatja be, hogy hogyan kell ezt megtenni:

57 Biztonság //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

58 Biztonság Továbbá a szolgáltatókat úgy kell konfigurálni, hogy csak olyan bejövő tranzakciókat fogadjanak el a kliensektől, amelyek authentikáltak és authorizáltak. Egy bejövő tranzakciót csak akkor szabad elfogadni, ha az egy teljesen megbízható klienstől érkezett

59 Policy követelmények A WCF ilyeneket használ az adatfolyam- szabályzásra Megtalálhatóak a szolgáltató policy dokumentációjában, ami a contract-ok, konfigurációk és attribútumok összességé-ből generálódik. Ezt a kliens HTTP-n keresztül GET-tel, vagy WS-MetadataExchange kérés-válasz segítségével kérheti le A kliens feldolgozhatja ezt policy dokumentumot, hogy eldönthesse, milyen műveleteket támogat a szolgáltató, és azoknak milyen követelményeik vannak

60 Policy követelmények Az adatfolyamok Policy követelményei hatással vannak magára az adatfolyamra, azáltal, hogy specifikálják a SOAP header-eket, melyeket a kliens elküldhet a szolgál-tatónak egy tranzakció reprezentációja-ként Minden tranzakció header-je meg kell hogy legyen jelölve a MustUnderstand tulajdonsággal, mely true-ra van állítva Ha ez nem teljesül, akkor SOAP hibával elutasításra kerül

61 Policy követelmények Egyszerre csak egy tranzakciófüggő policy lehet jelen egy szimpla műveletben Azok a policy dokumentumok, melyekben több, mint egy tranzakció assertion (követelés) szerepel egy művelethez, helytelenek és a WCF elutasítja azokat Továbbá csak egy szimpla tranzakció szerepelhet egy port-típuson belül

62 WS-AtomicTransaction Ez egy együttműködő tranzakció-protokoll Lehetőséget nyújt elosztott tranzakciók Web- szolgáltatásonok keresztüli üzenet- továbbítására Együttműködő módon koordinálja a hete-rogén infrastruktúrával rendelkező tranzakciókat Kétfázisú commit-protokollt használ, amely automatikus választ készít elosztott alkalmazások, tranzakció managerek és resource managerek között

63 WS-AtomicTransaction A WS-AT WCF-beli implementációja magába foglal egy ú.n. MSDTC (Microsoft Distributed Transaction Coordinator) nevű tranzakció manager-be épített protokoll szolgáltatást A WS-AT használatával a WCF alkalma-zások képesek tranzakciókat áramoltatni más alkalmazásoknak, beleértve az együttműködő web-szolgáltatásokat, melyek harmadik fél által készített technológiákra támaszkodnak

64 WS-AtomicTransaction Amikor egy tranzakció egy kliens és egy szerver között áramlik, a használt tranzakció protokoll meg van határozva azon binding által, amit a szerver tár fel a kliens által kiválasztott endpointon Néhány WCF rendszer által biztosított kötés alapból az OleTransactions protokollt használják a tranzakció terjesztéséhez, míg másoknál ugyanott a WS-AT a default. Az adott kötésben adott tranzakció protokoll választása a programban módosítható

65 WS-AtomicTransaction A protokollválasztások hatásai: –Az üzenet header-jének a formátumát arra használják, hogy áramoltassák a tranzakciót a klienstől a szerver felé –A hálózati protokollt arra használják, hogy kétfázisú commit-protokollt futtassanak a kliens tranzakció managere és a szerver tranzakciói között (mindezt azért, hogy meghatározzák a tranzakció eredményét)

66 WS-AtomicTransaction Ha a szerver és a kliens is WCF-et használ, akkor nincs szükség a WS-AT-re Helyette használható a NetTcpBinding default beállítása a TransactionFlow attribútum engedélyezésével, amely így inkább az OleTransactions protokollt fogja használni. Ha mégis web-szolgáltatásokon keresztül áramoltat az alkalmazás, akkor muszáj WS-AT-t használni.


Letölteni ppt "Tranzakciók kezelése a WCF- ben. Bevezetés A tranzakció egy olyan logikai egység, amely több elemi lépést úgy fog össze, hogy azok vagy mind sikeresen."

Hasonló előadás


Google Hirdetések