HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Web állapot megőrzése külső alkalmazás által


Állapotkezelés 1. rész

Példaprogram letöltése

10060 bájt

Ha az ASP.NET-es alkalmazásunkban használjuk a Session-t olyan adatok tárolására, melyek fontosak a programunk helyes működéséhez, akkor célszerű biztosítanunk azt, hogy a Session-ban tárolt adatok akkor se vesszenek el, ha hiba történik programunk futása során, vagy valamilyen oknál fogva újra kell indítani az IIS-t, vagy csak a felhasználó böngészője nem támogatja a cookie kezelést, melyen keresztül a Session információi megmaradnának.
Lehetőségünk van arra, hogy egy külső alkalmazást kérjünk meg arra, hogy tárolja a Session-ba helyezett információinkat. Így ezek mindaddig fennmaradnak, amíg ez az alkalmazás fut. Eközben az IIS akár újra is indulhat, programunk is kiakadhat, nem lesz gond belőle, mert amint újra indul rendszerünk, az addig tárolt információk továbbra is rendelkezésre állnak.
Mivel ez a külső alkalmazás egy másik számítógépen is futhat, mint amelyiken az ASP.NET-es alkalmazásunk, így még akkor is megmaradnak a Session információk, ha újraindítjuk a számítógépet.

Mire is jó a Session? Itt tárolhatunk el olyan információkat, melyek egy felhasználó egy böngészőjének kérésével kapcsolatos. Ez egy munkafolyamat, vagy Session. Ha ugyanaz a felhasználó mondjuk két böngészőt futtat és ugyanazt az URL-t címzi meg, akkor alkalmazásunkban ez már két különböző munkafolyamat, Session lesz.
A munkafolyamatban célszerűen olyan információkat tárolunk, melyekre a további lépésekhez még szükségünk lesz. Például egy internetes áruházban a felhasználó több terméket válogat össze a „kosárba”. Ezeket a termékeket és a rendelt mennyiségeket tárolnunk kell egészen addig, amíg a tényleges rendelést le nem adja. Mivel áruházunkat többen is látogathatják egy időben, így minden munkafolyamat számára elkülönített területen kell a tárolást elvégezni, hogy a sok-sok „kosár” tartalma ne keveredjen össze. Nyilván nem lenne jó dolog, ha bármilyen külső ok, vagy belső programhiba miatt elveszne a „kosár” tartalma minden felhasználónknál.
A biztonság növelésének érdekében adott egy olyan alkalmazás, mely Windows szervizként fut és képes az ASP.NET-es alkalmazások Session információinak tárolására.
A dolgot egyszerűsíti az a tény, hogy programozás szempontjából semmit nem kell változtatnunk a forráskódunkon: a Session objektum ugyanúgy használható, mint eddig. A különbség a web.config állományban lesz, ahol előírhatjuk a Session kezelésének módját.
Ehhez a sessionState résznél a mode értékét StateServer-re kell megváltoztatnunk. A stateConnectionString-ben előírható, hogy melyik számítógépen található az az alkalmazás, mely elvégzi a Session információk tárolását. Ezt egy IP címmel tehetjük meg. Az alapértelmezett a 127.0.0.1, vagyis a saját gép.
<sessionState 
            mode="StateServer"
            stateConnectionString="tcpip=127.0.0.1:42424"
    />
Ahhoz, hogy így működjön is az alkalmazásunk még egy dolgot meg kell tennünk: indítsuk el az ASP.NET State Service nevű Windows szerviz alkalmazást. Ha állandó jelleggel használjuk ezt a módszert, akkor célszerű a szervizt automatikusan indulóra állítani.
A web.config stateConnectionString-jénél találunk egy port számot is, melyen az alkalmazás kommunikál. Ez alapértelmezett értékben 42424. Ha másik portot szeretnénk használni, akkor ezt megváltoztathatjuk a registry-ben a HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\ Services\ aspnet_state\ Parameters címen, ahol a Port bejegyzés értékét kell átírni.
Ezek után a Session objektum változatlan módon használható.
Mellékelt példában egy Data01 nevű adatot próbálunk kiolvasni a Session-ból. Ha még nem lett eltárolva - ilyen eset az első kérés alkalmazásunk felé -, akkor hiba keletkezik. Ezt kezelve eltárolhatjuk itt a szükséges értéket, így a következő kéréskor már a Session-ból kap értéket a Label1.


    private void Page_Load(object sender, System.EventArgs e)
    {
      try
      {
        Label1.Text = Session["Data01"].ToString();
      }
      catch
      {
        Session["Data01"] = "Software Online";
        Label1.Text = "Store session";
      }
Minden munkafolyamat kap egy egyedi azonosítót is automatikusan, hogy az egyes folyamatok között különbséget lehessen tenni. Ha szükségünk van erre az értékre, akkor ezt a SessionID property-n keresztül megkaphatjuk. A munkafolyamat azonosítója egy 120 bites érték, melyet ASCII karaktereket tároló sztringként kaphatunk meg, így aztán akár egy URL-ben is felhasználhatjuk.
      Label2.Text = Session.SessionID;
    }

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2002 évkönyv 321. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |