Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoGeltrude Catalano Modificato 10 anni fa
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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.