La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

ASP.NET Managing State Roberto Brunetti Blog: blogs.devleap.com/rob.rss.

Presentazioni simili


Presentazione sul tema: "ASP.NET Managing State Roberto Brunetti Blog: blogs.devleap.com/rob.rss."— Transcript della presentazione:

1 http://www.DevLeap.it ASP.NET Managing State Roberto Brunetti Roberto@DevLeap.it Blog: blogs.devleap.com/rob.rss

2 http://www.DevLeap.it Chi siamo www.DevLeap.itwww.DevLeap.itwww.DevLeap.it Un gruppo di 5 persone con tanta voglia diUn gruppo di 5 persone con tanta voglia di Studiare a fondo le tecnologieStudiare a fondo le tecnologie Capire il behind the scenesCapire il behind the scenes Implementare soluzioni realiImplementare soluzioni reali Confrontarsi con le problematiche realiConfrontarsi con le problematiche reali Sperimentare nuove ideeSperimentare nuove idee

3 http://www.DevLeap.it Cosa Facciamo SviluppoSviluppo CorsiCorsi ConferenzeConferenze SeminariSeminari MentoringMentoring Analisi e disegno di progettoAnalisi e disegno di progetto Auditing su realizzazioni proprie o di terze partiAuditing su realizzazioni proprie o di terze parti Valutazione skill risorse umaneValutazione skill risorse umane Non facciamo sviluppo direttamenteNon facciamo sviluppo direttamente (Supporto telefonico/via email a contorno di altri servizi: mentoring)(Supporto telefonico/via email a contorno di altri servizi: mentoring) Definizione di percorsi di crescita per team di sviluppoDefinizione di percorsi di crescita per team di sviluppo

4 http://www.DevLeap.it Html e Http La dura verità

5 http://www.DevLeap.it Client Server Richiesta HTTP default.htm IIS/Apache Risposta HTTP Request/Response Http

6 http://www.DevLeap.it Client Server Richiesta HTTP Active Server Pages engine default.aspx IIS JScript VB / C# Esecuzione ADO.NET Recupero risultati Risposta HTTP http://www.dcc.com/equipment/catalog_type.asp? ProductType=rock+shoes ASP: flusso dellapplicazione

7 http://www.DevLeap.it Stateless Ogni richiesta è a se stanteOgni richiesta è a se stante Non esistono informazioni di stato in HttpNon esistono informazioni di stato in Http Per ogni richiesta dobbiamo preoccuparci di inviare il contenutoPer ogni richiesta dobbiamo preoccuparci di inviare il contenuto Ad esempio riempire i campi di un form con le informazioni digitate dallutenteAd esempio riempire i campi di un form con le informazioni digitate dallutente

8 http://www.DevLeap.it Stateless Ripresentare le informazioni digitateRipresentare le informazioni digitate<INPUTTYPE=TEXT NAME=txtNome VALUE= NAME=txtNome VALUE= >

9 http://www.DevLeap.it ASP.NET Web Form <INPUT TYPE=Text ID=txtCognome runst=server> </FORM> I controlli mantengono lo statoI controlli mantengono lo stato

10 http://www.DevLeap.it Mantengono lo stato ? I controlli server mantengono le proprietà impostate fra round-tripI controlli server mantengono le proprietà impostate fra round-trip Tramite un campo hiddenTramite un campo hidden __VIEWSTATE__VIEWSTATE ProPro Meno plumbingMeno plumbing Meno roundtrip verso i datiMeno roundtrip verso i dati ControContro __VIEWSTATE occupa banda__VIEWSTATE occupa banda E disabilitabileE disabilitabile

11 http://www.DevLeap.it Demo 10 ViewStateViewState View SourceView Source Modifica attributo al clickModifica attributo al click Azzera: Cambia colore pulsanteAzzera: Cambia colore pulsante Disable su ControlloDisable su Controllo Non tiene il bgcolorNon tiene il bgcolor Disable su PaginaDisable su Pagina Non tiene il bgcolorNon tiene il bgcolor

12 http://www.DevLeap.it Gestione dello stato Burocrazia ? Intro/Real

13 http://www.DevLeap.it Manage State ? Il Web è statelessIl Web è stateless Mantenere lo stato delle informazioniMantenere lo stato delle informazioni ValoriValori VariabiliVariabili ProprietàProprietà Server-Side per riutilizzarli fra richieste diverseServer-Side per riutilizzarli fra richieste diverse Sulla stessa paginaSulla stessa pagina Sullintera applicazioneSullintera applicazione

14 http://www.DevLeap.it Manage State Server SideServer Side Web.ConfigWeb.Config ApplicationApplication Session (se cookie andrebbe dopo)Session (se cookie andrebbe dopo) CachingCaching Client/Server SideClient/Server Side CookieCookie Hidden FieldHidden Field QueryStringQueryString ViewStateViewState

15 http://www.DevLeap.it Web.Config Può contenere valori CustomPuò contenere valori Custom Connection StringConnection String Informazioni statiche che prima si mettevano in Application o su file esterniInformazioni statiche che prima si mettevano in Application o su file esterni Nel codiceNel codice Using/Imports System.ConfigurationUsing/Imports System.Configuration strConn = Configuration.AppSettings(DSN)strConn = Configuration.AppSettings(DSN)

16 http://www.DevLeap.it Occhio al Publish Differenziare Test / ProduzioneDifferenziare Test / Produzione Connessioni al DBConnessioni al DB Email routingEmail routing LogLog SecuritySecurity EtcEtc Exclude / Include da VS.NETExclude / Include da VS.NET

17 http://www.DevLeap.it Web.Config Quando viene lettoQuando viene letto Alla partenza dellapplicazioneAlla partenza dellapplicazione Quando è necessario ricompilareQuando è necessario ricompilare Dove viene mantenutoDove viene mantenuto HashTable nellHttpContextHashTable nellHttpContext Come si accorge dei cambiamentiCome si accorge dei cambiamenti Viene calcolato lhash diViene calcolato lhash di CreationTime + LastWriteTime + LenghtCreationTime + LastWriteTime + Lenght E memorizzato in un file esterno nella directory di compilazioneE memorizzato in un file esterno nella directory di compilazione Ad ogni richiesta viene fatta la verifica del valore dellhashAd ogni richiesta viene fatta la verifica del valore dellhash Se non quadra viene rilettoSe non quadra viene riletto

18 http://www.DevLeap.it Application Classe HttpApplicationStateClasse HttpApplicationState Oggetto ApplicationOggetto Application Esposto come proprietà diEsposto come proprietà di HttpContext e PageHttpContext e Page Memoria condivisa per tutta lapplicazioneMemoria condivisa per tutta lapplicazione Indipendente dallutenteIndipendente dallutente Accesso tramite Nome/ValoreAccesso tramite Nome/Valore Non usarla per dati temporaneiNon usarla per dati temporanei Difficile impostare una scadenzaDifficile impostare una scadenza Da non confondere con la classe HttpApplication esposta come ApplicationInstance che rappresenta lintera applicazione ASP.NET e non unarea di memoriaDa non confondere con la classe HttpApplication esposta come ApplicationInstance che rappresenta lintera applicazione ASP.NET e non unarea di memoria

19 http://www.DevLeap.it Session Session... In ASP 1/2/3 le sessionIn ASP 1/2/3 le session Necessitano del supporto dei cookie sul clientNecessitano del supporto dei cookie sul client Sono single-machine e non adatte a configurazione di load-balancingSono single-machine e non adatte a configurazione di load-balancing Consumano molta RAMConsumano molta RAM In ASP.NET le sessionIn ASP.NET le session Possono lavorare come prima oppurePossono lavorare come prima oppure Non necessitare dei cookieNon necessitare dei cookie Essere multi-machineEssere multi-machine Appoggiarsi su DB o su uno State ServerAppoggiarsi su DB o su uno State Server

20 http://www.DevLeap.it Session Classe HttpSessionStateClasse HttpSessionState Oggetto SessionOggetto Session Esposto come proprietà diEsposto come proprietà di HttpContext e PageHttpContext e Page Memoria condivisa per tutta lapplicazioneMemoria condivisa per tutta lapplicazione Dipendente dallutenteDipendente dallutente Accesso tramite Nome/ValoreAccesso tramite Nome/Valore Non usarla per dati temporaneiNon usarla per dati temporanei Difficile impostare una scadenzaDifficile impostare una scadenza Implementata dal modulo System.Web.SessionState.SessionStateModuleImplementata dal modulo System.Web.SessionState.SessionStateModule

21 http://www.DevLeap.it Cosè Browser Server Browser Session Session Cookie Cookie URL Sess ASPNET_WP.EXE HttpRuntime Class Modulo X Session HTTP Handler Pagina1.aspx HttpRuntime Class Modulo X Session HTTP Handler Pagina2.aspx ASP.NET worker thread 1 ASP.NET worker thread 2

22 http://www.DevLeap.it Come si usa Session(nome) = ValoreSession(nome) = Valore Response.Write(Session(nome))Response.Write(Session(nome)) Non occorre definire le varibiliNon occorre definire le varibili Come nella vecchia versioneCome nella vecchia versione Ma occhio a controllarne lesistenza prima di utilizzarne un valoreMa occhio a controllarne lesistenza prima di utilizzarne un valore Oppure valorizzare tutte la var nel Session_OnStartOppure valorizzare tutte la var nel Session_OnStart

23 http://www.DevLeap.it Configurazioni possibili <sessionState mode="Off|Inproc|StateServer|SQLServer" cookieless="true|false" timeout="number of minutes" stateConnectionString="tcpip=server:port" sqlConnectionString="sql connection string" /> Off se non si usaOff se non si usa

24 http://www.DevLeap.it Session senza Cookie Non necessita di cookie abilitati sul clientNon necessita di cookie abilitati sul client Il cookie viene copiato nei vari Url linkati dalla paginaIl cookie viene copiato nei vari Url linkati dalla pagina Http://xxx.com/3463287462764/pagina.aspxHttp://xxx.com/3463287462764/pagina.aspxHttp://xxx.com/3463287462764/pagina.aspx Utilizzabile in tutte le modalitàUtilizzabile in tutte le modalità Session.ModeSession.Mode Gestiti dal filtro ISAPI ASPNET_FILTER.DLLGestiti dal filtro ISAPI ASPNET_FILTER.DLL

25 http://www.DevLeap.it In-process Session Più veloce Più veloce Singolo Server – No Load Balancing Singolo Server – No Load Balancing Se ASPNET_WP crasha – Addio Session Se ASPNET_WP crasha – Addio Session Browser ASPNET_WP Browser Session Session Cookie Cookie URL Sess

26 http://www.DevLeap.it ASPNET_STATE Può girare anche sullo stesso server ASPNET_STATE Può girare anche sullo stesso server Se ASPNET_WP crasha – Le Session sopravvivono Se ASPNET_WP crasha – Le Session sopravvivono Più lento di InProcess – Più veloce di SQL Server Session Più lento di InProcess – Più veloce di SQL Server Session Load Balancing Load Balancing Se crasha ASPNET_STATE – Addio Sessioni di tutti i server Se crasha ASPNET_STATE – Addio Sessioni di tutti i server Browser ASPNET_WP SERVER 2 Browser Cookie Cookie URL Sess ASPNET_STATE SERVER 3 Session Browser Cookie URL Sess ASPNET_WP SERVER 1 Session Session

27 http://www.DevLeap.it SQL può girare anche sullo stesso server SQL può girare anche sullo stesso server Se ASPNET_WP crasha – Le Session sopravvivono Se ASPNET_WP crasha – Le Session sopravvivono Metodo più lento ma più sicuro (se in cluster) Metodo più lento ma più sicuro (se in cluster) Load Balancing Load Balancing Browser ASPNET_WP SERVER 2 Browser Cookie Cookie URL Sess Session Browser Cookie ASPNET_WP SERVER 1 Session Session Sql Server o Sql Cluster

28 http://www.DevLeap.it SQL Server Session %WinDir%\Microsoft.NET\Framework\vxxxx\I nstallSQLState.sql%WinDir%\Microsoft.NET\Framework\vxxxx\I nstallSQLState.sql Per creare Database e Stored ProcedurePer creare Database e Stored Procedure DataBase: ASPStateDataBase: ASPState SP: Insert, Get, UpdateSP: Insert, Get, Update I dati vengono appoggiati al TEMPDBI dati vengono appoggiati al TEMPDB Al Restart di SQL Server le Session vengono perseAl Restart di SQL Server le Session vengono perse Possiamo modificare InstallSQLState per creare e appoggiare i dati su un altro DBPossiamo modificare InstallSQLState per creare e appoggiare i dati su un altro DB Nella 1.1 InstallPersistSQLState.sqlNella 1.1 InstallPersistSQLState.sql

29 http://www.DevLeap.it Per avere un idea 0 200 400 600 800 1000 1200 1400 ASP.NET InProcASP.NET State StoreASP.NET SQL Store Requests/Sec (2P Server)

30 http://www.DevLeap.it HttpHandler e HttpModule ASPNET_WP.EXE HttpRuntime Class Modulo 1 Modulo 2 PageHandler Pagina1.aspx HttpRuntime Class Modulo 1 Modulo 2 PageHandler Pagina2.aspx ASP.NET worker thread 1 ASP.NET worker thread 2

31 http://www.DevLeap.it HttpHandler e HttpModule ASPNET_WP.EXE HttpRuntime Class AuthentSession PageHandler Pagina1.aspx HttpRuntime Class Authent PageHandler Pagina2.aspx ASP.NET worker thread 1 ASP.NET worker thread 2

32 http://www.DevLeap.it SessionStateModule Dopo aver letto la configurazione relativa alle sessioniDopo aver letto la configurazione relativa alle sessioni Si abbona allevento AcquireRequestState, ReleaseRequestState e EndRequest.Si abbona allevento AcquireRequestState, ReleaseRequestState e EndRequest. Durante la gestione dell AcquireRequestState recupera il SessionID ed i valori da inserire nelloggetto SessionDurante la gestione dell AcquireRequestState recupera il SessionID ed i valori da inserire nelloggetto Session

33 http://www.DevLeap.it Session Conclusione Non abbiamo più i problemi di ASP 3.0Non abbiamo più i problemi di ASP 3.0 Nessun problema di COM AffinityNessun problema di COM Affinity Load Balancing consentitoLoad Balancing consentito Detto questo, non usatele se non ne avete bisognoDetto questo, non usatele se non ne avete bisogno Togliere lHttpModule da Machine.ConfigTogliere lHttpModule da Machine.Config Oppure Oppure Togliere il modulo dal Web.ConfigTogliere il modulo dal Web.Config Oppure Oppure Disabilitare le session sulle pagine che non le utilizzanoDisabilitare le session sulle pagine che non le utilizzano @Page EnableSessionState=false@Page EnableSessionState=false Se una pagina legge solamente i valori senza scriverliSe una pagina legge solamente i valori senza scriverli @Page EnableSessionState=readonly@Page EnableSessionState=readonly

34 http://www.DevLeap.it Cookie Namespace System.WebNamespace System.Web SempliceSemplice x = new HttpCookie(name,value)x = new HttpCookie(name,value) Response.AppendCookie(x)Response.AppendCookie(x) If Request.Cookies(name) = Null / nullIf Request.Cookies(name) = Null / null Stringa = Request.Cookies(name)Stringa = Request.Cookies(name) Da non confondere conDa non confondere con System.Net.CookieSystem.Net.Cookie

35 http://www.DevLeap.it Cookie multivalue x = new HttpCookie(name)x = new HttpCookie(name) x.Values.Add(nome, valore)x.Values.Add(nome, valore) Response.AppendCookie(x)Response.AppendCookie(x) If Request.Cookies(name) = Null / nullIf Request.Cookies(name) = Null / null Stringa = Request.Cookies(name).Values(nome)Stringa = Request.Cookies(name).Values(nome) Usare il meno possibile gli oggetti ->Usare il meno possibile gli oggetti ->

36 http://www.DevLeap.it Passare da variabile locale x = new HttpCookie(name)x = new HttpCookie(name) x.Values.Add(nome, valore)x.Values.Add(nome, valore) Response.AppendCookie(x)Response.AppendCookie(x) HttpCookie x = Request.Cookies(name)HttpCookie x = Request.Cookies(name) If x = Null / nullIf x = Null / null Stringa =x.Values(nome)Stringa =x.Values(nome)

37 http://www.DevLeap.it Cookie Member Domain Domain Dominio da associare al cookieDominio da associare al cookie Expires Expires DateTime per la scadenza.DateTime per la scadenza. HasKeysHasKeys True se ha subkeysTrue se ha subkeys ItemItem Shortcut per HttpCookie.Values[ key ]Shortcut per HttpCookie.Values[ key ] Per compatibilità con ASP 3.0Per compatibilità con ASP 3.0 NameName Legge/Imposta il nome del cookieLegge/Imposta il nome del cookie PathPath Path da associare al cookiePath da associare al cookie SecureSecure Legge/Imposta linvio sicuro (su Https)Legge/Imposta linvio sicuro (su Https) ValueValue Valore del cookie single-valueValore del cookie single-value ValuesValues Collection nome/valore contenuto nel cookieCollection nome/valore contenuto nel cookie

38 http://www.DevLeap.it Cookie Warnings Usare Https perUsare Https per Criptare il traffico di username e passwordCriptare il traffico di username e password Criptare i cookie persistenti su discoCriptare i cookie persistenti su disco RedirectFromLoginPage(..., True)RedirectFromLoginPage(..., True) Su tutto il sito per evitare che il cookie di login passi in chiaroSu tutto il sito per evitare che il cookie di login passi in chiaro Occhio ai tag IMG e HREFOcchio ai tag IMG e HREF Negare laccesso Http a tutte le parti protette per essere sicuriNegare laccesso Http a tutte le parti protette per essere sicuri Se il sito ha una parte protetta Https si deve stare attentiSe il sito ha una parte protetta Https si deve stare attenti Path=qualcosa per inviarlo solo a tali directoryPath=qualcosa per inviarlo solo a tali directory Altrimenti viene inviato anche per le richieste http verso le altre sezioni del sitoAltrimenti viene inviato anche per le richieste http verso le altre sezioni del sito

39 http://www.DevLeap.it Manage State Per Roundtrip su stessa paginaPer Roundtrip su stessa pagina Campi HiddenCampi Hidden Li conosciamoLi conosciamo ViewStateViewState

40 http://www.DevLeap.it VIEWSTATE Proprietà della classe ControlProprietà della classe Control Contiene le informazioni di stato dei controlliContiene le informazioni di stato dei controlli Dictionary della classe StateDictionary della classe State Si trasforma in un campo hiddenSi trasforma in un campo hidden Dopo Base64 EncodingDopo Base64 Encoding __VIEWSTATE__VIEWSTATE Per default è null o emptyPer default è null o empty I valori possono essere letti e scritti anche da codiceI valori possono essere letti e scritti anche da codice ViewState[xxx] = ABCViewState[xxx] = ABC

41 http://www.DevLeap.it ViewState nella sequenza eventi Page/ Control InitVIEWSTATELoad Update input field ValidationPage_LoadEvents: _Change _Click VIEWSTATESave Render Dispose PreRender

42 http://www.DevLeap.it ViewState LoadViewStateLoadViewState SaveViewStateSaveViewState Metodi implementati dalla classe baseMetodi implementati dalla classe base Sono OverridableSono Overridable Filtri per i valori più comuniFiltri per i valori più comuni String, Int, Boolean, Array, ArrayList, HashTableString, Int, Boolean, Array, ArrayList, HashTable Possiamo scriverci filtri per nostri tipiPossiamo scriverci filtri per nostri tipi Che devono essere serializzatiChe devono essere serializzati

43 http://www.DevLeap.it ViewState VS... HiddenHidden E un campo hiddenE un campo hidden CookieCookie Non necessita di cookie abilitatiNon necessita di cookie abilitati Il viewstate serve per singola paginaIl viewstate serve per singola pagina SessionSession Le session sono pesanti, soprattutto su DBLe session sono pesanti, soprattutto su DB Il viewstate serve per singola paginaIl viewstate serve per singola pagina ApplicationApplication Non è specifica per utentiNon è specifica per utenti Il viewstate serve per singola paginaIl viewstate serve per singola pagina CacheCache Il viewstate serve per singola paginaIl viewstate serve per singola pagina La Cache è temporaneaLa Cache è temporanea La vediamo fra un attimoLa vediamo fra un attimo

44 http://www.DevLeap.it ViewState Property/Method EnableViewStateEnableViewState Per pagina o controlloPer pagina o controllo IsTrackingViewStateIsTrackingViewState True mentre il controllo scrive nella StateBagTrue mentre il controllo scrive nella StateBag ViewStateIgnoreCaseViewStateIgnoreCase True = StateBag Case insensitiveTrue = StateBag Case insensitive HasChildViewStateHasChildViewState ClearChildViewStateClearChildViewState Load/SaveLoad/Save TrackViewStateTrackViewState Monitorizza le modifiche al viewstate per salvarle nella StateBagMonitorizza le modifiche al viewstate per salvarle nella StateBag

45 http://www.DevLeap.it ViewState Sicuro DefaultDefault Base64 Encoding: Come se fosse in chiaroBase64 Encoding: Come se fosse in chiaro <pages enableViewStateMac="true<pages enableViewStateMac="true Disabilitabile anche da Machine / Web.ConfigDisabilitabile anche da Machine / Web.Config Non da codiceNon da codice Controllo integritàControllo integrità Machine.Config machineKey per algoritmo di hashMachine.Config machineKey per algoritmo di hash SHA1SHA1 MD5MD5 CriptingCripting Machine.Config machineKeyMachine.Config machineKey 3DES3DES

46 http://www.DevLeap.it Cripting VIEWSTATE decriptionKey ETATSWEIV Response Client ETATSWEIV Request decriptionKey VIEWSTATE SaveViewState Client LoadViewState

47 Controllo Integrità VIEWvalidationKey VIEWHash Response Client VIEW Hash HashHash Request VIEWvalidationKey = Hash Hash

48 http://www.DevLeap.it Hash e Cript Machine.ConfigMachine.Config validationKeyvalidationKey Per controllo signaturePer controllo signature decriptionKeydecriptionKey Per chiave di criptaggioPer chiave di criptaggio Se single-serverSe single-server autogenerate va benissimoautogenerate va benissimo Se Load-BalancingSe Load-Balancing Devono essere uguali in tutti i machine.config dei server in questioneDevono essere uguali in tutti i machine.config dei server in questione

49 http://www.DevLeap.it ViewState Performance ServerServer Disabilitabile per pagina o controlloDisabilitabile per pagina o controllo @Page EnableViewState = false...@Page EnableViewState = false... <asp:TextBox EnableViewState = false...<asp:TextBox EnableViewState = false... Disabilitabile da Web.ConfigDisabilitabile da Web.Config <pages enableViewState="true<pages enableViewState="true Disabilitabile da Machine.ConfigDisabilitabile da Machine.Config <pages enableViewState="true<pages enableViewState="true Da CodiceDa Codice Page.EnableViewState = falsePage.EnableViewState = false Control.EnableViewState = falseControl.EnableViewState = false

50 http://www.DevLeap.it ViewState Performance Ancora ServerAncora Server Usare solo i 6 filtri di defaultUsare solo i 6 filtri di default Oggetti custom serializzabiliOggetti custom serializzabili Molto alto il costo di serializzazioneMolto alto il costo di serializzazione Non consuma risorse server (RAM, DISCO)Non consuma risorse server (RAM, DISCO) Non criptarlo per maggiori performanceNon criptarlo per maggiori performance ClientClient E un campo hiddenE un campo hidden Se troppo grande lentezza nel passaggio dei datiSe troppo grande lentezza nel passaggio dei dati Tracing per controllare il peso dei singoli controlliTracing per controllare il peso dei singoli controlli

51 http://www.DevLeap.it Caching Occhio alla pronuncia Intro

52 http://www.DevLeap.it Caching Il miglior modo di ottimizzare il codice èIl miglior modo di ottimizzare il codice è Non eseguirlo !!!Non eseguirlo !!! Se i dati non cambiano in un arco di tempo perchè rieseguire le query ?Se i dati non cambiano in un arco di tempo perchè rieseguire le query ? Il codice statico è molto più veloce del codice dinamicoIl codice statico è molto più veloce del codice dinamico Torniamo a FrontPageTorniamo a FrontPage Mai ! magari a DreamWeaverMai ! magari a DreamWeaver

53 http://www.DevLeap.it Caching di Pagine e Controlli Implementato da System.Web.Caching.OutputCacheModuleImplementato da System.Web.Caching.OutputCacheModule ASPNET_WP.EXE HttpRuntime Class OutputCacheSession HTTP Handler Pagina1.aspx HttpRuntime Class OutputCache HTTP Handler Pagina2.aspx ASP.NET worker thread 1 ASP.NET worker thread 2 Cache

54 http://www.DevLeap.it Page Output Caching La pagina viene eseguita la prima voltaLa pagina viene eseguita la prima volta Viene cachataViene cachata E recuperata dalla cache per le richieste successiveE recuperata dalla cache per le richieste successive Direttiva di cache per la paginaDirettiva di cache per la pagina Oppure da codiceOppure da codice Response.Cache.SetExpires(DateTime.Now.Ad dSeconds(10))Response.Cache.SetExpires(DateTime.Now.Ad dSeconds(10))

55 http://www.DevLeap.it Cache Location ServerServer ClientClient DownstreamDownstream PublicPublic NoneNone Da codiceDa codice Response.Cache.SetCacheabilityResponse.Cache.SetCacheability HttpCacheability.ServerHttpCacheability.Server HttpCacheability.ClientHttpCacheability.Client........

56 http://www.DevLeap.it Direttiva OutputCache La pagina potrebbe essere diversa in base al QueryString o alla POSTLa pagina potrebbe essere diversa in base al QueryString o alla POST VaryByParamVaryByParam Cacha n copie della pagina in base ai parametri HTTP GET / POSTCacha n copie della pagina in base ai parametri HTTP GET / POST Indicare i parametri da considerare separati da ;Indicare i parametri da considerare separati da ; Supporta * (per tutti i parametri)Supporta * (per tutti i parametri) Esempio VaryByParam=TipoCorso; SedeCorsoEsempio VaryByParam=TipoCorso; SedeCorso Parametro obbligatorioParametro obbligatorio Impostarlo a noneImpostarlo a none

57 http://www.DevLeap.it Oppure OutputCache VaryByHeaderVaryByHeader Cache le pagine in base agli header HTTPCache le pagine in base agli header HTTP Sempre stringa con ;Sempre stringa con ; Esempio LOGON_USEREsempio LOGON_USER VaryByCustomVaryByCustom Su tipo di browser – BrowserSu tipo di browser – Browser EstensibileEstensibile Sempre stringa ;Sempre stringa ;

58 http://www.DevLeap.it VaryByCustom Esempio VaryByCustom=PreferenzeVaryByCustom=Preferenze VBVB Public Overrides Function GetVaryByCustomString(context as HttpContext, arg as String) as String Select Case arg Case Preferenze Return(Preferenze= & Request.Cookies(Pref) Case... End Select End Function C#C# public override string GetVaryByCustomString(HttpContext context, string arg ) { switch (arg) { case Preferenze Return(Preferenze= & Request.Cookies(Pref); case... }}

59 http://www.DevLeap.it Partial Caching Non è detto che si voglia sempre cachare tutta la paginaNon è detto che si voglia sempre cachare tutta la pagina Sensato cachare solo le parti comuniSensato cachare solo le parti comuni Partial Page CachingPartial Page Caching Consente di cachare User ControlConsente di cachare User Control Ognuno con criteri diversiOgnuno con criteri diversi La sintassi è identicaLa sintassi è identica Attributo VaryByControlAttributo VaryByControl Estensibile con ProprietàEstensibile con Proprietà

60 http://www.DevLeap.it Caching API Occhio alla pronuncia Intro

61 http://www.DevLeap.it Cache API Classe CacheClasse Cache Namespace System.Web.CachingNamespace System.Web.Caching Oggetto CacheOggetto Cache Esposto da Page.ResponseEsposto da Page.Response Memoria condivisa per tutta lapplicazioneMemoria condivisa per tutta lapplicazione Indipendente dallutenteIndipendente dallutente Accesso tramite Nome/ValoreAccesso tramite Nome/Valore Usarla per dati temporaneiUsarla per dati temporanei Gli item usati poco vengono rimossiGli item usati poco vengono rimossi Supporta la notifica di rimozione tramite il Delegate CacheItemRemovedCallBackSupporta la notifica di rimozione tramite il Delegate CacheItemRemovedCallBack

62 http://www.DevLeap.it Un esempio Cache.Add o Cache.InsertCache.Add o Cache.Insert(NomeValoreDependencyTimeTimeSpanPriorityPriorityDecayCallBack)

63 http://www.DevLeap.it Cache Dependency Dependency da fileDependency da file New CacheDependencyNew CacheDependency Da File/Directory (Array di File o Directory)Da File/Directory (Array di File o Directory) Iniziare ad un DateTime specificoIniziare ad un DateTime specifico Da un altro elemento in cacheDa un altro elemento in cache Da un array di elementi in cacheDa un array di elementi in cache Da unaltra dependencyDa unaltra dependency Ms- help://MS.NETFrameworkSDK/cpref/html/f rlrfSystemWebCachingCacheDependencyCl assctorTopic.htmMs- help://MS.NETFrameworkSDK/cpref/html/f rlrfSystemWebCachingCacheDependencyCl assctorTopic.htmMs- help://MS.NETFrameworkSDK/cpref/html/f rlrfSystemWebCachingCacheDependencyCl assctorTopic.htmMs- help://MS.NETFrameworkSDK/cpref/html/f rlrfSystemWebCachingCacheDependencyCl assctorTopic.htm

64 http://www.DevLeap.it Cache RemovedCallBack private static CacheItemRemovedCallback onRimoz =null; onRimoz = new CacheItemRemovedCallBack(this.RemovedCallBack); Cache.Insert(xx,xx, null, d, t, null, null, onRimoz); public void RemovedCallback(String strX, Object O, CacheItemRemovedReason R) { // Codice per ricreare lelemento Accesso al DB Cache.Insert(.....)}

65 http://www.DevLeap.it Altre Informazioni Dove posso ottenere maggiori informazioniDove posso ottenere maggiori informazioni www.DevLeap.itwww.DevLeap.itwww.DevLeap.it www.asp.netwww.asp.netwww.asp.net Developer resourcesDeveloper resources Microsoft Visual Studio.NETMicrosoft Visual Studio.NET Microsoft.NET Framework SDKMicrosoft.NET Framework SDK Microsoft Developer NetworkMicrosoft Developer Network

66 http://www.DevLeap.it ASP.NET Managing State I vostri feedback sono importanti ScrivetemiScrivetemi Grazie della partecipazione –A presto –Roberto@DevLeap.it


Scaricare ppt "ASP.NET Managing State Roberto Brunetti Blog: blogs.devleap.com/rob.rss."

Presentazioni simili


Annunci Google