• Nem Talált Eredményt

Az App.config, a külső konfigurációs fájlok segítségével tudtuk az üzenetek naplózását (a naplózás részleteit, helyét) beállítani. Ez nagyszerű eszköz a szolgáltatás üzemeltetői számára, így ugyanis elemezhetik, feldolgozhatják a naplóbejegyzéseket, működési problémák után kutatva.

Hasonló módon elemezhetjük a teljesítménymutatókat is (másodpercenként beérkező üzenetek száma, kliensek száma, az egyes üzenetek feldolgozási időtartama stb.). Ezt is a külső konfigurációs fájlban állíthatjuk be, a Diagnostics részen, a Performance Counter (teljesítményszámláló) részen.

Amennyiben a szolgáltatásunk működéséhez szükséges, kérhetünk tranzakciókezelést. A tranzakciók műveletek olyan gyűjteményei, amelyek atomiak, összefüggőek, izolálhatóak. A WCF ehhez WS-AT (WS-AtomicTransaction) protokollt használ, és képes integrálni az OLE korábbi tranzakciós megvalósítását is.

A WCF támogatja még a „megbízható” (reliable) üzenetküldési mintákat is. Ezek:

AtLeastOnce: legalább egyszer – az üzenetnek legalább egyszer el kell érnie a szervert, sikertelen küldés esetén meg kell ismételni. Ha a szerver visszaigazolása késik, közben a küldő újra próbálkozhat a küldéssel, így ugyanazon üzenet többször is elérheti a szervert (többször meghívja a függvényt)

AtMostOnce: legfeljebb egyszer – az üzenet elképzelhető, hogy nem éri el a szervert, de ha igen, legfeljebb egyszer éri el (0 vagy 1 alkalommal hívja meg a függvényt)

ExactlyOnce: pontosan egyszer – az üzenet legalább és legfeljebb egyszer érheti el a szervert.

InOrder: sorrendben – több szálon futó (de akár egy szálon is érdekes) kliens esetén a szerver felé küldött üzenetek pontosan abban a sorrendben kell, hogy beérkezzenek, amilyen sorrendben a kliens elküldte őket.

A WCF technológia állandóan lépést tart a protokollszabványok fejlődésével, alkalmazza a legújabb adat-, illetve üzenetátviteli titkosítási eljárásokat. Nem csak .NET Framework fejlesztésű programok összekapcsolására alkalmas, hanem idegen programozási nyelveken megírt és idegen platformokon működő alkalmazásokkal is képes együttműködni. Használata nagymértékben növeli az elosztott alkalmazások tervezésének, fejlesztésének, tesztelésének idejét.

Zárszó

Ebben a jegyzetben áttekintettük a hagyományos (szekvenciális), a párhuzamos és az elosztott alkalmazások fejlesztésével kapcsolatos problémákat, alapfogalmakat.

A párhuzamos programozás hardverigénye ma már hétköznapi, asztali gépekben is felbukkan a több processzormag alkalmazása. Láthattuk, hogy a többszálú működés a tervezést is egyszerűsítheti, amennyiben a programnak egy időben több tevékenységet kell végeznie.

A párhuzamos programok előnye (és egyben hátránya is), hogy a szálak közötti kommunikáció egyszerű, mivel minden szál ugyanazon programhoz tartozik, a közös változókon keresztül osztozhatnak az adatokon. Problémás azonban felfedezni, mikor kerül bele egy változóba a kívánt érték, mikor válik az használhatóvá más szálak részére. Megoldást kínál erre a problémára a termelő-fogyasztó problémában is ismertetett módszer, amikor nem egy skalár, hanem egy összetett típusú változóba (pl. lista, sor, verem) helyezzük el az értékeket. Ezen (de nem csak ezen) típusú változók nem thread-safe jellemzőjűek, nem képesek egy időben több szálat kiszolgálni, így használatukhoz kizárólagosságot kell igényelni. Ezt egyszerű esetben a lock, összetettebb esetben a Monitor osztály metódusaival tudjuk kivitelezni. A szálak indítását, az állapotok lekérdezését, a szálak közötti szinkronizálást a Thread osztály példányainak metódusaival végezhetjük el.

Az elosztott programozás esetén olyan programok kívánnak egymással kommunikálni, amelyek fizikailag különböző számítógépeken futnak. Természetesen megoldható, hogy szimuláljuk ezt a viselkedést egyetlen gépen futó – de ezen szempontból ugyanúgy különbözőnek tekintendő – programokkal. Mindkét esetben a programok elkülönült memóriaterületen gazdálkodnak, így az adatok cseréje csak üzenetküldésekkel valósítható meg.

Bemutattunk néhány algoritmust, problémát, melyek mind párhuzamos, mind elosztott működés esetén előfordulhatnak.

A programok üzenetküldéseivel kapcsolatosan sok a probléma. Még az egyszerű adattípusok sem feltétlenül azonosak a különböző programozási nyelvek között, az összetett adattípusok esetén pedig egészen nagyok lehetnek az eltérések. Az adatok küldése és fogadása során szerializációs, deszerializációs lépéseket kell tenni.

Ezek kevésbé terhelik a processzort, ha bináris az adatküldés, és jelentős plusz munkát jelent, ha string- vagy XML-alapú a kommunikáció. A bináris működés csak azonos platformok összekapcsolása esetén jelenthet alternatívát, míg a string vagy XML esetén különböző programnyelveken megírt programok, platformok is képesek lehetnek egymással kommunikálni.

Magát a kommunikációs módszerek megismerését az alapszintű, streamalapú kommunikációval kezdtük, tudomásul véve, hogy minden más módszer is ezen az alapszinten működik. A küldés-fogadás megismerkedése után bemutattuk, hogyan lehet több klienssel kapcsolatot fenntartó szervert tervezni, készíteni.

Magasabb szintű működést érhetünk el, ha nem streamalapú, hanem RPC-szintű módszereket alkalmazunk.

Ennek során bemutattuk az automatizmust, a példányok és a hívások lehetséges kapcsolatát (singlecall, singleton). Ekkor kerültek előtérbe a szerializációs problémák. Bemutattuk, hogyan lehet mégis elérni a kliensekhez rendelt egyedi példányok készítését, vagy ezt pótolni a munkamenet (session) kezelésével. Az RPC mindkét oldalán felfedezhető egy igény, hogy a szerver és a kliens is azonos típusinformációval rendelkezzen, amit legkönnyebben DLL-be helyezett interfész segítségével érhetünk el. Ez a WCF-ben bemutatott szerződés előfutára. Hasonlóan, itt került bemutatásra a proxy osztály, mint a kliens oldali átlátszóság egyik fontos eszköze.

A másik magasabb szintű működés a webszolgáltatás, ahol a szerver kódját a webszerver (IIS) pótolhatja. A webszolgáltatások kapcsán az egyedi példányok kevésbé megoldhatóak, inkább a munkamenet használata a jellemzőbb. Ehhez automatikus támogatást ad a webszolgáltatást támogató alrendszer.

A webszolgáltatások kapcsán ismerhettük meg a WSDL leírás fontosságát, mely szükséges abból a szempontból, hogy különböző platformok összekapcsolása felé nyissunk. A WCF is használhatja ugyanezen módszert a szolgáltatással kapcsolatos információk szerver és a kliens közötti megosztására.

A WCF használatakor széles körben választhatunk előre definiált protokollok közül, és sajátot is kialakíthatunk.

Újragondolt XML-szerializációt használhatunk. A szolgáltatás címzéséhez a jól bevált url módszert

alkalmazhatjuk. A WCF motor a bejövő hívás és a példányok összekapcsolására jóval szélesebb lehetőségeket tartalmaz, mint az RPC.

A WCF fontos részét képezi az alkalmazáshoz tartozó külső konfigurációs fájl automatikus használata, melynek előnyeit elsősorban szerver oldalon, de akár kliens oldalon is élvezhetjük. Nemcsak a kapcsolat paramétereit helyezhetjük itt el (beleértve a címet, a kötés típusát), de titkosítási beállításokat, naplózást és teljesítményelemzéshez szükséges mérési előírásokat is. Mindezekkel tehát a programok tervezése és kódolása során nem kell törődnünk, ezek kezelése maga a WCF motor feladata.

A WCF tehát igen átgondolt, szélességében igen kiterjedt, sok aktuális szabványt támogat, mind protokollok, mind titkosítási eljárások terén. A rá eső munkát könnyedén átvállalja, a fejlesztők koncentrálhatnak a szolgáltatás fejlesztésével kapcsolatos munkákra.

Meg kell jegyeznünk, nem a WCF az egyetlen megoldás ezen problémákra. A Microsoft világán kívüli kezdeményezés a CORBA, Common Object Request Broker Architecture, mely több, komoly ipari erőt képviselő cég tömörüléséből fakadó szabványok gyűjteménye. A Microsoft sajnos nem része ennek a csoportnak, így a .NET Frameworkben nincs gyári támogatás a CORBA kommunikációs protokollok felé (a WCF-ben sincs). Független helyről letölthető ilyen támogatás, az interneten kis keresgéléssel.

Szintén érdekes kezdeményezés még az ICE, Internet Communications Engine, mely egy független társaság, a fejlesztése (http://zeroc.com). Ez egy több nyelvhez implementált támogatás, nagy sebességű kommunikációt ígér, használata nem bonyolultabb, mint amit az RPC során ismertettünk.

Az elosztott működés a számítási felhők megjelenésével a jövőben csak bővülni fog. A gyenge hardverfelszereltségű mobil eszközök rohamos terjedésével egyre több számítási feladat kerül át nagy teljesítményű szerverek vagy szerverfarmok felé. Figyeljünk a tendenciára: eddig is érdemes volt ezen technológiával foglalkozni, de a jövőben a hangsúly is egyre nagyobb lesz. Egy igazi programozónak nem szabad ezt a területet ismeretlenül és kiaknázatlanul hagyni.

Reméljük, a jegyzet segítséget nyújt a módszerek minél rövidebb megismerésében, a példák és az ábrák pedig segítenek az első lépések gyors és sikeres leküzdésében. Sok sikert és örömet kívánunk a programozási ismereteink ez irányú fejlesztéséhez!

A szerző

Köszönetnyilvánítás

A szerző ezúton szeretne köszönetét kifejezni a könyv lektorának, Pócza Krisztiánnak, aki építő jellegű, hasznos észrevételeivel, gyakorlati tapasztalataival, a témakörbe eső széleskörű látásmódjával nagyban segítette a jegyzet végső formára hozását.

Irodalomjegyzék

[1] Flynn, M., Some Computer Organizations and Their Effectiveness, IEEE Trans. Comput., Vol. C-21, pp.

948, 1972.

[2] M. J. Flynn: Very high-speed computer systems. Proceedings of the IEEE 5(6) 1966, 1901.1909. 6.1

[3] Pablo Cibraro, Kurt Claeys, Fabio Cozzolino, Johann Grabner, Professional WCF 4, Windows Communication Foundation with .NET 4 Wiley Publishing, Inc. 2010, ISBN- 978-0-470-56314-4

[4] Pro WCF, Practitcal Microsoft SOA Implementation, Chris Peiris, Dennis Mulder, Shawn Cicoria, Amit Bahree, Nishith Pathak, APress, 2007, ISBN: 978-1-55059-702-6

[5] Fóthi Ákos, Horváth Zoltán: Bevezetés a programozásba, ELTE Faculty of Informatics, (Oktatási Minisztérium támogatásával), ISBN: 963 463 757 4, ELTE IK Elektronikus Könyvtár, http://people.inf.elte.hu/ekonyvtar, 2005

[6] Horváth Zoltán: Párhuzamos programozás alapjai, Különálló része a digitális kiadványnak, ELTE Faculty of Informatics, (Oktatási Minisztérium támogatásával), ISBN: 963 463 757 4, ELTE IK Elektronikus Könyvtár, http://people.inf.elte.hu/ekonyvtar, 2005

[7] David S. Platt: Introducing MicrosoftŠ.NET Microsoft Press, April 2003, ISBN: 9780735619180

[8] Matthew MacDonald: MicrosoftŠ.NET Distributed Applications: Integrating XML Web Services and .NET Remoting, Microsoft Press (March 26, 2003) ISBN: 978-0735619333

[9] CommonObject Request Broker Architecture: Core Specification December 2002 Version 3.0 - Editorial update

[10] http://zeroc.com/index.html, Internet Communication Engine honlapja, 2010

[11] Dijkstra, Edsger W.: Cooperating sequential processes (EWD-123). E.W. Dijkstra Archive. Center for American History, The University of Texas at Austin. (September 1965)

[12] Dr. Pócza Krisztián, ELTE IK, A .NET Framework és Programozása tárgy oktatási honlapja, http://avalon.inf.elte.hu/edu/net/default.aspx.