1 / 66

Tran zakciók kezelése a WCF-ben

Tran zakció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 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

hateya
Download Presentation

Tran zakciók kezelése a WCF-ben

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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ésatomisá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éskonzisztencia ő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ésizolá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éstartó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: • time-out-ok és izolációs szintek beállítása a ServiceBehaviorAttribute attribútummal, • tranzakciók funkcionalitásának és viselkedésének beállítása a OperationBehaviorAttribute attribútummal, • 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át

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

  14. Tranzakció-modellekWCFT • 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ó-modellekWCFT • 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ó-modellekSTT • A System.Transactions névtér két modellt ötvöz: • egy explicit programmodellt a Transaction osztály támogatásával, illetve • 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

  17. Tranzakció-modellekSTT • A System.Transactions egy WCF szolgáltatásban olyan programmodell létrehozását támogatja, mellyel egy tranzakciót a kliensben hozhatjuk létre • 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ó-modellekMSDTC • 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: • TransactionFlowAttribute • ServiceBehaviorAttribute • OperationBehaviorAttribute

  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

  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: • TransactionAutoCompleteOnSessionClose • ReleaseServiceInstanceOnTransactionComplete • TransactionIsolationLevel • TransactionTimeout

  23. ServiceBehaviorAttributeTransactionAutoCompleteOnSessionCloseServiceBehaviorAttributeTransactionAutoCompleteOnSessionClose • 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. ServiceBehaviorAttributeReleaseDerviceInstanceOnTransactionCompleteServiceBehaviorAttributeReleaseDerviceInstanceOnTransactionComplete • 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. ServiceBehaviorAttributeTransactionIsolationLevel • (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álasztani • 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. ServiceBehaviorAttributeTransactionIsolationLevel • 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.

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

  28. ServiceBehaviorAttributeTransactionTimeout • 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. ServiceBehaviorAttributeTransactionTimeout • 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. OperationBehaviorAttributeTransactionScopeRequired • 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. OperationBehaviorAttributeTransactionScopeRequired • 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. OperationBehaviorAttributeTransactionScopeRequired 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

  34. OperationBehaviorAttributeTransactionAutoComplete • 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.

  35. OperationBehaviorAttributeTransactionAutoComplete • 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 <netNamedPipeBinding> <binding name="test" closeTimeout="00:00:10" openTimeout="00:00:20" receiveTimeout="00:00:30" sendTimeout="00:00:40" transactionFlow="true" transactionProtocol="WSAtomicTransactionOctober2004" hostNameComparisonMode="WeakWildcard" maxBufferSize="1001" maxConnections="123" maxReceivedMessageSize="1000"> </binding> </netNamedPipeBinding>

  41. transactionTimeout beállítása <configuration> <system.serviceModel> <behaviors> <behavior name="NewBehavior" transactionTimeout="00:01:00" /> <!-- 1 minute timeout --> </behaviors> </system.serviceModel> </configuration>

  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ásokWS-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ásokOleTransaction 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ásokWS-AT vs. OleT

  48. Adatfolyam beállításokWS-AT vs. OleT

  49. Adatfolyam beállításoküzenet feldolgozási eredmények

  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).

More Related