47
ASP.NET 4.0 Állapot menedzsment, oldal életciklus Krizsán Zoltán ver 1.1

ASP.NET 4.0 Állapot menedzsment, oldal életciklus

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

ASP.NET 4.0 Állapot menedzsment,

oldal életciklusKrizsán Zoltán

ver 1.1

Page 2: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

2

Állapot nyilvántartás okaihttp állapot mentesUgyanaz 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.

Page 3: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

3

Globális események: global.asaxké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

Page 4: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

4

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

Page 5: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

5

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

Page 6: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

6

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

1. Page request: újra kell e fordítani, vagy mehet cache-ből2. Start: Request, Response, IsPostBack tulajdonságok beállítása3. Initialization: mester oldal, és téma hozzárendelés4. Load: viewstate-ből az adatok a vezérlőkbe5. Postback event handling: ha postback volt, akkor ennek a feldolgozása. A végén adatellenőrzés.6. Rendering: Előtte a view state-be menti az állapotokat. Hívja a vezérlők Render() metódusát, amik a válasz kimenetére írják a megfelelő TAG-eket.7. Unload: vezérlők kisöprése.

Page 7: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

7

PreInit eseményStart szakasz után, de még az inicializálás előttHaszná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

Page 8: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

8

Oldal inicializálásInit 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.

Page 9: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

9

Oldal betöltése1. OnLoad oldal metódus

adatbázis kapcsolat létrehozása itt2. OnLoad metódusa a vezérlőknek3. Load eseménye az oldalnak4. Load eseménye a vezérlőknek5. Vezérlők eseménykezelői6. LoadComplete

Page 10: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

10

Vezérlők eseményeiA megfelelő vezérlő,megfelelő eseményekliens oldali aktivitás alapján.Érdemes használni az IsValid tulajdonságát az oldalnak.

Page 11: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

11

Kód generálás1. PreRender esemény2. PreRenderComplete esemény

DataBind() után3. SaveStateComplete esemény4. Render metódusa hívódik minden vezérlőnek

saját vezérlőnél ezt írjuk felül.

Page 12: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

12

Oldal kisöprésUnload 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.write metódust.

Page 13: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

13

Teljes életciklusábra

Page 14: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

14

Á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)?

Page 15: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

15

Kliens oldali lehetőségekView stateControl stateHidden fields

<asp:HiddenField />CookiesQuery strings

Page 16: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

16

ViewState jellemzőiNincs szerver oldali erőforrás szükségleteEgyszerű használatBiztonsá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)

Page 17: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

17

ControlStateNincs 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

Page 18: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

18

Rejtett mezőkNincs 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.

Page 19: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

19

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

Page 20: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

20

Query stringNincs 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.

Page 21: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

21

Á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!

Page 22: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

22

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

Page 23: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

23

Objektum tárolása a ViewState-benObjektum sorosíthatósága

[Serializable] public class Customer { public string FirstName; public string LastName; public Customer(string firstName, string lastName) { FirstName = firstName; LastName = lastName; } }

Page 24: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

24

Objektum tárolása a ViewState-benObjektum tárolása, kivétele

Customer cust = new Customer(”név",”név2"); ViewState["CurrentCustomer"] = cust;

cust = (Customer)ViewState["CurrentCustomer"];

Page 25: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

25

Süti használata Ikulcs – érték használat

Response.Cookies["userName"].Value = "patrick";Response.Cookies["userName"].Expires = DateTime.Now.AddDays(1);

HttpCookie aCookie = new HttpCookie("lastVisit");aCookie.Value = DateTime.Now.ToString();aCookie.Expires = DateTime.Now.AddDays(1);Response.Cookies.Add(aCookie);

Page 26: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

26

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

HttpCookie aCookie = new HttpCookie("userInfo");aCookie.Values["userName"] = "patrick";aCookie.Values["lastVisit"] = DateTime.Now.ToString();aCookie.Expires = DateTime.Now.AddDays(1);

Response.Cookies.Add(aCookie);

Page 27: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

27

Süti használata IIIhatókőr szűkítés - mappára

HttpCookie appCookie = new HttpCookie("AppCookie");appCookie.Value = "written " + DateTime.Now.ToString();appCookie.Expires = DateTime.Now.AddDays(1);appCookie.Path = "/Application1"; Response.Cookies.Add(appCookie);

Page 28: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

28

Süti használat IVtörlés

aCookie.Expires = DateTime.Now.AddDays(-1);

aCookie.Values.Remove(subkeyName);

Page 29: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

29

Query string használata OlvasásRequest.QueryString["Name"];vagyRequest.QueryString[0];

ÍrásResponse.Redirect("WebForm2.Aspx?" +"Name=" + Server.UrlEncode(this.txtName.Text) +"&LastName=" + Server.UrlEncode(this.txtLastName.Text));

Page 30: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

30

Szerver oldali állapot menedzsmentApplication stateSession stateProfile propertiesDatabase support (külön diasorozat)

Page 31: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

31

ApplicationEgyszerű 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.

Page 32: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

32

SessionEgyszerű 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.

Page 33: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

33

proflie tulajdonságokFelhaszná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ényelGondoskodni kell felszabadításról.

Page 34: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

34

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

Page 35: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

35

SessionÁllapot szerver (State server) - beállítás

<configuration> <system.web> <sessionState mode="StateServer" stateConnectionString="tcpip=SampleStateServer:42424" cookieless="false" timeout="20"/> </system.web></configuration>

Page 36: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

36

SessionSQL szerver- beállítás

<configuration> <system.web> <sessionState mode="SQLServer" sqlConnectionString="Integrated Security=SSPI;data source=SampleSqlServer;" /> </system.web></configuration>

Page 37: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

37

Session használataMentés:string firstName = "Jeff";string lastName = "Smith";string city = "Seattle";Session["FirstName"] = firstName;Session["LastName"] = lastName;Session["City"] = city;

Ellenőrzés:if (Session["City"] == null)

Olvasás:string firstName = (string)(Session["First"]);string lastName = (string)(Session["Last"]);string city = (string)(Session["City"]);

Page 38: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

38

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

Page 39: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

39

Profile Konfigurációban szerepeltetni kell: <profile> <providers> <clear/> <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/> </providers> <properties> <add name="cim" type="String"/> </properties> </profile>Ezután használható:Context.Profile["Name"] = "Hello";

Feladat:http://msdn.microsoft.com/en-us/library/taab950e.aspx

Page 40: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

40

Alkalmazás objektum használataÍrás:Application.Lock();Application["Message"] = ”Szöveg";Application["PageRequestCount"] = 0;Application.UnLock();

Olvasás:if (Application["AppStartTime"] != null){ DateTime myAppStartTime = (DateTime)Application["AppStartTime"];}

Page 41: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

41

CacheAlkalmazá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 cacheAz oldal kimenetét tárolja, amit nem kell generálni.

Page 42: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

42

Alkalmazás CacheObjektumokat 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.

Page 43: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

43

Cache lejárat, érvényességSliding 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).

Page 44: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

44

Cache függőségMegadhatunk 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)

Page 45: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

45

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", new System.Web.Caching.CacheDependency(null, dependencies));

Cache.Insert("CacheItem7", "Cached Item 7", null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(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);

Page 46: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

46

Cache használataKiolvasáscachedString = (string)Cache["CacheItem"];

TörlésCache.Remove("MyData1");

Page 47: ASP.NET  4.0  Állapot  menedzsment, oldal életciklus

47

Cache használatakisöprés figyelés

private static string GenerateAndCacheReport(){ string report = "Report Text. " + _lastRemoved.ToString();

HttpRuntime.Cache.Insert( "MyReport", report, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, 0, 15), CacheItemPriority.Default, new CacheItemRemovedCallback(ReportRemovedCallback));

return report; }

public static void ReportRemovedCallback(String key, object value, CacheItemRemovedReason removedReason){ _lastRemoved = "Re-created " + DateTime.Now.ToString(); }