1 / 54

ASP.NET 4.0 Állapot menedzsment, oldal életciklus

ASP.NET 4.0 Állapot menedzsment, oldal életciklus. Krizsán Zoltán ver 1.1. Állapot nyilvántartás okai. http állapot mentes Ugyanaz a kliens több kérésén keresztül információkat tartunk valahol. Az oldalakat minden kérés alkalmával felépítik. Az oldalakat minden válasz után lebontják.

winter
Download Presentation

ASP.NET 4.0 Állapot menedzsment, oldal életciklus

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. ASP.NET 4.0 Állapot menedzsment, oldal életciklus Krizsán Zoltán ver 1.1

  2. Állapot nyilvántartás okai • http állapot mentes • Ugyanaz a kliens több kérésén keresztül információkat tartunk valahol. • Az oldalakat minden kérés alkalmával felépítik. • Az oldalakat minden válasz után lebontják.

  3. Globális események: global.asax • kéréshez kapcsolódó eseménykezelők, • bizonyos feltételekre reagáló eseménykezelők • Application_Start • Session_Start • Application_Error: kezeletlen kivétel • Session_End • Application_End • Application_Disposed: biztos, ami biztos takarítás

  4. Kérés – válasz események sorrendje

  5. Kérés kiszolgálás menete IIS 7

  6. Oldal életciklus szakaszaihttp://msdn.microsoft.com/en-us/library/ms178472.aspx

  7. PreInit esemény • Start szakasz után, de még az inicializálás előtt • Használhatjuk a IsPostBack tulajdonságot. • Mire használjuk • vezérlők dinamikus létrehozása • mester oldalak dinamikus beállítása • téma dinamikus beállítása

  8. Oldal inicializálás • Init esemény • A vezérlők Init eseményei után. • Skin alkalmazása után. • Vezérlők tulajdonságainak olvasása, beállítása. • InitComplete esemény • Inicializáló szakasz végén. • Itt már érvényes a ViewState. • A ViewState módosítása itt javasolt.

  9. Oldal betöltése • OnLoad oldal metódus • adatbázis kapcsolat létrehozása itt • OnLoad metódusa a vezérlőknek • Load eseménye az oldalnak • Load eseménye a vezérlőknek • Vezérlők eseménykezelői • LoadComplete

  10. Vezérlők eseményei • A megfelelő vezérlő, • megfelelő eseménye • kliens oldali aktivitás alapján. • Érdemes használni az IsValid tulajdonságát az oldalnak.

  11. Kód generálás • PreRender esemény • PreRenderComplete esemény • DataBind() után • SaveStateComplete esemény • Render metódusa hívódik minden vezérlőnek • saját vezérlőnél ezt írjuk felül.

  12. Oldal kisöprés • Unload esemény • szüntessük meg az utóhatásokat • adatbázis kapcsolatok lebontása • fájlok zárás • loggok • nem használhatjuk a Response objektum írásra pl. Write metódust.

  13. Teljes életciklusábra

  14. Életciklus, eseménykezelő metódusok létrehozása

  15. Állapotmentés, de melyiket? • Mekkora információt kell tárolni? • Kliensnél engedélyezett a süti? • Szerver vagy kliens oldalon lenne hasznos? • A tárolandó adat érzékeny? • Melyek a teljesítmény sávszélesség követelmények? • Felhasználónként kell tárolni? • Meddig kell tárolni az információt? • Osztott a webapp (web farm)?

  16. Kliens oldali lehetőségek • View state • Control state • Hidden fields<asp:HiddenField /> • Cookies • Query strings

  17. ViewState jellemzői • Nincs szerver oldali erőforrás szükséglete • Egyszerű használat • Biztonságosabb, mint a rejtett mezők (hash-elt, tömörített, kódolt, de nem titkosított) • Nagy méret esetén lassít. • Nem mindig támogatott (mobil eszközök). • Biztonsági kockázat (mégiscsak a kódban van)

  18. ControlState • Nincs szerver oldali erőforrás szükséglete. • Mindig működik, nem lehet letiltani. • Macerás használni • saját vezérlő • OnInit felüldefiniálás • SaveControlState • LoadControlState

  19. Rejtett mezők • Nincs szerver oldali erőforrás szükséglete. • Biztos, hogy működik. Mindenki támogatja. • Kódolni kell, de a használat egyszerű. • Biztonsági kockázat. • Tartalma csak szöveg lehet. • Sok, nagy adat -> lassú oldal. • Nagy méret gond lehet az átvitel során.

  20. Süti • Nincs szerver oldali erőforrás szükséglete. • Konfigurálható érvényesség. • Egyszerű: kulcs – érték pár • Méret korlát (4096, mostanában 8192) • Letiltható a kliensben. • Biztonsági kockázat. • Érték csak szöveg lehet.

  21. Querystring • Nincs szerver oldali erőforrás szükséglete. • Biztos, hogy működik. Mindenki támogatja. • Kódolni kell, de a használat egyszerű. • Méret korlát (2083) • Biztonsági kockázat. • Érték csak szöveg lehet.

  22. Állapot menedzsmentViewState • Beépített mechanizmus, • de kiterjeszthető • saját elemeket is kezel, ViewState[control.ID] = érték • ki lehet olvasni kódból is explicit módon, • objektum is lehet benne • Minden változott értéket ment/tölt (nem csak szöveg). • 4.0-tól kezdődően szelektív támogatás is lehet. • Ne használjuk, ha az érték amúgy is jön!

  23. ViewState • Tiltani lehet • elemenként, • egész oldalra <%@ Page Language="C#" EnableViewState="false" ... %>, • konfigurációból:<configuration><system.web><pages enableViewState="false" /></system.web></configuration> • Öröklődik az EnableViewState (inherited)

  24. Objektum tárolása a ViewState-benObjektum sorosíthatósága [Serializable] publicclassCustomer { publicstringFirstName; publicstringLastName; public Customer(stringfirstName, stringlastName) { FirstName = firstName; LastName = lastName; } }

  25. Objektum tárolása a ViewState-benObjektum tárolása, kivétele Customercust = newCustomer(”név",”név2"); ViewState["CurrentCustomer"] = cust; cust = (Customer)ViewState["CurrentCustomer"];

  26. Süti használata Ikulcs – érték használat Response.Cookies["userName"].Value = "patrick"; Response.Cookies["userName"].Expires = DateTime.Now.AddDays(1); HttpCookieaCookie = newHttpCookie("lastVisit"); aCookie.Value= DateTime.Now.ToString(); aCookie.Expires= DateTime.Now.AddDays(1); Response.Cookies.Add(aCookie);

  27. Süti használata IIkulcs – alkulcs - érték használat Response.Cookies["userInfo"]["userName"] = "patrick"; Response.Cookies["userInfo"]["lastVisit"] = DateTime.Now.ToString(); Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(1); HttpCookieaCookie = newHttpCookie("userInfo"); aCookie.Values["userName"] = "patrick"; aCookie.Values["lastVisit"] = DateTime.Now.ToString(); aCookie.Expires= DateTime.Now.AddDays(1); Response.Cookies.Add(aCookie);

  28. Süti használata IIIhatókőr szűkítés - mappára HttpCookieappCookie = newHttpCookie("AppCookie"); appCookie.Value= "written " + DateTime.Now.ToString(); appCookie.Expires= DateTime.Now.AddDays(1); appCookie.Path= "/Application1"; Response.Cookies.Add(appCookie);

  29. Süti használat IVtörlés aCookie.Expires = DateTime.Now.AddDays(-1); aCookie.Values.Remove(subkeyName);

  30. Querystring használata • Olvasás Request.QueryString["Name"]; vagy Request.QueryString[0]; • Írás Response.Redirect("WebForm2.Aspx?" + "Name=" + Server.UrlEncode(this.txtName.Text) + "&LastName=" + Server.UrlEncode(this.txtLastName.Text));

  31. Szerver oldali állapot menedzsment • Application state • Session state • Profile properties • Database support (külön diasorozat)

  32. Application • Egyszerű használat. • Alkalmazás – globális hatókör. • Alkalmazás – globális hatókör. • Elveszhet, ha a szerver kisöpri a webapp-ot. • Szerver memóriában van.

  33. Session • Egyszerű használat. • Események. • IIS átmenti ha ki kell söpörni a webapp-ot. • Süti nélkül is használható. • Kiterjeszthető. • Érvényességi idő. • Érvényességi idő (max). • Teljesítmény veszteséggel jár.

  34. proflie tulajdonságok • Felhasználóhoz kötődik. • Kiterjeszthető • IIS menti állapotát ha ki kell söpörni a webapp-ot. • Teljesítmény veszteséggel jár. • Konfigurációt igényel • Gondoskodni kell felszabadításról.

  35. Sessionadat tárolási módok • SessionStateMode felsorolt típus: • InProc: a web szerver memóriájában (default) • StateServer: ASP.NET állapot szerviz tárolja, külön processzben. Web farm esetén is használható, ha újraindul a webapp, akkor is megmaradnak a változó értékei. • SQLServer: adatb-ben tárolja. Web farm esetén is használható, ha újraindul a webapp, akkor is megmaradnak a változó értékei. • Custom: saját megoldás • Off: nincs

  36. SessionÁllapot szerver (State server) - beállítás <configuration> <system.web> <sessionStatemode="StateServer" stateConnectionString="tcpip=SampleStateServer:42424" cookieless="false" timeout="20"/> </system.web> </configuration>

  37. SessionSQL szerver- beállítás <configuration> <system.web> <sessionStatemode="SQLServer" sqlConnectionString="Integrated Security=SSPI;data source=SampleSqlServer;"/> </system.web> </configuration>

  38. Session használata Mentés: stringfirstName = "Jeff"; stringlastName = "Smith"; stringcity = "Seattle"; Session["FirstName"] = firstName; Session["LastName"] = lastName; Session["City"] = city; Ellenőrzés: if (Session["City"] == null) Olvasás: stringfirstName = (string)(Session["First"]); stringlastName = (string)(Session["Last"]); string city = (string)(Session["City"]);

  39. Profile előfeltétel • MS SQL | SQL Express adatbázis • aspnet_regsql.exe futtatása (legalább –A p) • Táblában tárol: aspnet_Profile • alapértelmezetten csak authentikált felhasználónak • Írás: Context.Profile["cim"] = "Hello"; • Olvasás: Label1.Text = (String)Context.Profile["cim"];

  40. Profile • Konfigurációban szerepeltetni kell: • <profile> • <providers> • <clear/> • <addname="AspNetSqlProfileProvider"type="System.Web.Profile.SqlProfileProvider" • connectionStringName="ApplicationServices"applicationName="/"/> • </providers> • <properties> • <addname="cim"type="String"/> • </properties> • </profile> • Ezután használható:Context.Profile[”cím”] = "Hello"; • Feladat: http://msdn.microsoft.com/en-us/library/taab950e.aspx

  41. Alkalmazás objektum használata Írás: Application.Lock(); Application["Message"] = ”Szöveg"; Application["PageRequestCount"] = 0; Application.UnLock(); Olvasás: if(Application["AppStartTime"] != null) { DateTimemyAppStartTime = (DateTime)Application["AppStartTime"]; }

  42. Cache • Alkalmazás cache • globális jellegű tárolók, az egész webapp gyorsítására • DataSet-ek, riportok, adatok, melyek megmaradnak kérések között. • Oldal cache • Az oldal kimenetét tárolja, amit nem kell generálni.

  43. Alkalmazás Cache • Objektumokat tárolhatunk ideiglenesesen. • Ha a webapp újraindul, akkor a cache is újraépül. • kulcs – érték párokat tárol. • Prioritás rendelhető az elemhez. • volatile – bár globális jellegű, de nem az alkalmazással együtt él. • kisöprődik • ha lejárt az érvényessége, • ha érvénytelenné válik, • ha kevés a memória.

  44. Cache lejárat, érvényesség • Sliding expiration (csúszó lejáratú)Miután elérték az elemet meddig maradjon még bent. • Absolute expirationPontosan meddig maradjon bent (használattól függetlenül).

  45. Cache függőség • Megadhatunk függőséget (file, db,…) • Ha változik amitől függ, akkor kisöprik az elemünket. • Függőséget fajtái: • kulcs: megadhatjuk a másik cache-ben tárolt elem kulcsát • file: ha a külső fájl módosult, vagy törölték, akkor kisöprik. • sql: ha az adatbázis egy táblája változik. • csoport (aggregate): Ha több elemtől is függ. Bármelyik változik, kisöprik. • saját (custom)

  46. Cache használatéték beillesztés Cache["CacheItem1"] = "Cached Item 1"; Cache.Insert("CacheItem2", ”szöveg2"); string[] dependencies = { "CacheItem2" }; Cache.Insert("CacheItem3", "Cached Item 3",newSystem.Web.Caching.CacheDependency(null, dependencies)); Cache.Insert("CacheItem7", "Cached Item 7", null, System.Web.Caching.Cache.NoAbsoluteExpiration, newTimeSpan(0, 10, 0)); Cache.Insert("CacheItem8", "Cached Item 8", null, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, null);

  47. Cache használata • Kiolvasás cachedString = (string)Cache["CacheItem"]; • Törlés Cache.Remove("MyData1");

  48. Cache használatakisöprés figyelés privatestaticstringGenerateAndCacheReport(){ string report = "Report Text. " + _lastRemoved.ToString(); HttpRuntime.Cache.Insert( "MyReport", report, null, Cache.NoAbsoluteExpiration, newTimeSpan(0, 0, 15), CacheItemPriority.Default, newCacheItemRemovedCallback(ReportRemovedCallback)); return report; } publicstaticvoidReportRemovedCallback(String key, object value, CacheItemRemovedReasonremovedReason){ _lastRemoved = "Re-created " + DateTime.Now.ToString(); }

  49. Feladat • +: növeli 1el • -: csökkenti 1el, ha + szám • 0: nulláz • Próbáljuk ki az össze lehetőséget! • Próbáljuk ki ugyanazon böngésző különböző ablakaiból! • Próbáljuk ki másik böngészőből!

  50. Feladat II - sütivel • Ha ne a ViewState-el oldjuk meg a feladatot, akkor tiltsuk le a támogatás false -> EnableViewState • Böngésző egyik ablakában növeljük, majd másik ablakában is növeljük (felváltva)! • Mi történik? Miért? • Lehetőleg központilag töltsünk mentsünk, ne az esemény kezelőben! (1 helyen kell átírni, ellenőrizni) • OnLoad-ban lehet betölteni, kimenteni nem lehet az unloadban (kivétel) • Request.Cookies[”kulcs”], response.Cookies[”kulcs”] gyűjtemény, vagy Request.Params[”kulcs”], Request[”kulcs”]

More Related