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

Slides:



Advertisements
Presentazioni simili
Sviluppare workflow per il nuovo 2007 Microsoft Office system e Windows SharePoint Services 3.0 Paolo Pialorsi
Advertisements

La sicurezza di ASP.NET e IIS
Midrange Modernization Conference 1 Scenari evolutivi per le soluzioni basate su AS/400 Walter Poloni Direttore Developer & Platform Evangelism Microsoft.
Luca Bianchi Windows Development Day Bologna 28 gennaio 2005 SQL Server Desktop Engine (MSDE) & SQL Server 2005 Express.
ASP.NET – Web Forms Davide Vernole.NET MVP. Di cosa parleremo Introduzione ad ASP.NET ASP.NET, dietro le quinte Componenti principali di una applicazione.
WSDL (Web Services Description Language) Laurea Magistrale in Informatica Reti 2 (2006/07) dott. Federico Paoloni
JPA Overview della tecnologia. Java Persistence Architecture Definita nella JSR-220 EJB 3.0 ( Tentativo di unificare EJB2.1 con.
1 Processi e Thread Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi.
Seam.
E Windows SharePoint Services 2.0 Ivan Renesto Overview how to use Windows SharePoint Services.
Un DataBase Management System (DBMS) relazionale client/server.
EJB Enterprise Java Beans B. Pernici. Approccio Java.
Unified Modeling Language class C {…} class B extends C {…} Esiste una notazione grafica per mostrare le relazioni di ereditarietà. Object StringC B Tutte.
1. Conoscere luso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali.
Citrix Metaframe. Metaframe è la soluzione client-server prodotta dalla Citrix in grado di rendere disponibili applicazioni e desktop a qualsiasi dispositivo.
Università La Sapienza Ingegneria del Software I 1 Ingegneria del software I Seminario 2: Microsoft.NET.
Packages. Package: insieme di classi e interfacce in relazione Per formare un package basta inserire la direttiva come prima istruzione nel file sorgente.
Introduzione ad ASP.net
Sequence. CREARE UNA SEQUENCE CREATE SEQUENCE nome [INCREMENT BY n] [START WITH n] [MAXVALUE n | NOMAXVALUE] [MINVALUE n | NOMINVALUE] [CYCLE | NOCYCLE]
Constraints.
Componenti dell’architettura Oracle
1 © 2013 Cobra Italia SpA All rights reserved Cobra group website Gennaio 2013.
IL WIKI COSE E COME FUNZIONA. COSE? Un wiki è uno spazio collettivo virtuale, una specie di sito web, i cui contenuti possono essere visti e modificati.
Realizzato da Roberto Savino Web e HTTP Terminologia Una pagina web consiste di oggetti Un oggetto può essere un file HTML, una immagine JPG, ecc. Una.
Microsoft Access Maschere.
JavaScript Lezione 5 Tipizzazione ed operazioni tra tipi diversi Istruzioni di input.
Filtered Index and Statistics Filtered Indexes Sergio Govoni
Primi passi con Windows: Gestione del Desktop Barra Applicazioni Menu Avvio ISTITUTO COMPRENSIVO N.7 - VIA VIVALDI - IMOLA Via Vivaldi, Imola.
C OME CREARE I FRAME. Dal pannello File fai doppio clic sul file default.html per aprire la pagina (figura 1.1). Figura 1.1 Il file default.html.
I mille volti della formazione dalle-learning allemployergame Novembre 2012 I mille volti della formazione: dalle-learning allemployergame 4° Release Novembre.
Il Booking Engine Html di HermesHotels è studiato per permettere I-Frame sui siti degli Hotels. Disponibile anche in modalità Pop- Up https, simile.
OUTPUT FORMATTATO La funzione printf consente di effettuare la stampa a video formattata. Sintassi: printf ( stringa_formato, arg0, arg1, … ); La stringa.
Tutorial relativo al Mio EBSCOhost. Benvenuti al tutorial dedicato a Mio EBSCOhost, verranno fornite le istruzioni per la configurazione e lutilizzo ottimizzato.
Moduli o Form I Moduli permettono all'utente di immettere informazioni...
Fondamenti di Informatica Corsi di Laurea in Ingegneria Gestionale Canale AL ESERCITAZIONE 6 ARGOMENTI: LAVORARE CON CLASSI METODI DELLISTANZA, COSTRUTTORI.
INTERNET Internet è una rete a livello mondiale che permette alle persone di comunicare ed ad accedere a banca dati da qualunque parte del mondo e su qualunque.
Gruppo 4: Gelmi Martina, Morelato Francesca, Parisi Elisa La mia scuola ha un sito Web: modelli per la qualità dei siti (Ingegneria del Web)
KNOwledge Store. INSTALLAZIONE KNOS 1.Architettura dellapplicazione 2.Prerequisiti hardware 3.Prerequisiti software 4.Installazione ruoli e funzionalità
INTERNET Antonio Papa Classe 2^ beat I.S.I.S. G. Meroni a.s. 2007/2008.
PROGETTO DI STRUMENTI PER LA CONFIGURAZIONE DI APPLICAZIONI JAVA ENTERPRISE Anno Accademico 2006 / 2007 Sessione III FACOLTÀ DI INGEGNERIA CORSO DI LAUREA.
LE RETI E IL DDNS.
Voting Sistema di votazione telematica. Che cosè Sito web per gestire votazioni tramite internet La sezione amministratore permette di progettare lo scenario.
Attività Formativa Sviluppo di un WORKFLOW ENGINE di Dott. Riccardo Gasperoni Alessandro Caricato Gabriele Trabucco in collaborazione con Progesi S.p.A.
SoLo mobile client in depth: Mercato mobile, licenze, deploy, uso, features.
WPF per il client Desktop
Fabio Cozzolino Vito Arconzo
Attribution-NonCommercial-ShareAlike SQL Server.
Attribution-NonCommercial-ShareAlike Le novità
Scoprirete che su Office non si può solo contare ma anche sviluppare.
Installazione di Drupal su Linux (sistemista) Installazione step-by-step e note.
IIS7 Media Services Piergiorgio Malusardi IT Pro Evangelist
VB.NET Sviluppo Applicazioni Desktop
Visual Studio Tools for Office: Developer Solutions Platform Fulvio Giaccari MCSD.NET / MCT Responsabile Usergroup ShareOffice Blog:
SQL Server 2005 Sicurezza Davide Mauri Factory Software
SUBQUERY Chi ha un salario maggiore di quello di Abel? Occorre scomporre la query in due sotto problemi: MAIN : quali impiegati hanno un salario maggiore.
Customer Support Research & Development Come registrarsi ed entrare in......ITRC.
Corso di Web Services A A Domenico Rosaci Patterns di E-Business D. RosaciPatterns per l'e-Business.
Negli ultimi anni, la richiesta di poter controllare in remoto la strumentazione e cresciuta rapidamente I miglioramenti nell’hardware e nel software insieme.
Collection & Generics in Java
Sistemi di elaborazione dell’informazione Modulo 3 -Protocolli applicativi Unità didattica 4 - Protocolli del Web Ernesto Damiani Lezione 3 – Esempi HTTP.
CREAZIONE UTENTE SU DATATOP. CREAZIONE UTENTE Andate su //datatop.di.unipi.it/webdb Login come utente: webdb password: ****** Administer -> User Manager.
SQL Developer Lanciare sqldeveloper (alias sul desktop) / c:\Oracle\sqldeveloper Associare tutti i tipi di file, se volete Tasto destro sulla spina “connection”
Azure: Mobile Services e Notification Hub ANDREA GIUNTA.
JDBC Java DataBase Connectivity SISTEMI ITIS B. CASTELLI Anno Scolastico
Workshop sulle problematiche di calcolo e reti nell'INFN
Eprogram informatica V anno. ASP.NET Introduzione ASP.NET (Active Server Page) è il linguaggio che, sfruttando la tecnologia.NET, permette di: -scrivere.
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
1 Università della Tuscia - Facoltà di Scienze Politiche. Informatica 2 - a.a Prof. Francesco Donini Active Server Pages.
ADO Per gestire i database con tecnologia ASP si utilizzano strumenti ADO (ActiveX Data Objects): un'architettura che fornisce oggetti.
Free .NET Hosting - somee.com
Transcript della presentazione:

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

Chi siamo 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

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 a contorno di altri servizi: mentoring)(Supporto telefonico/via a contorno di altri servizi: mentoring) Definizione di percorsi di crescita per team di sviluppoDefinizione di percorsi di crescita per team di sviluppo

Html e Http La dura verità

Client Server Richiesta HTTP default.htm IIS/Apache Risposta HTTP Request/Response Http

Client Server Richiesta HTTP Active Server Pages engine default.aspx IIS JScript VB / C# Esecuzione ADO.NET Recupero risultati Risposta HTTP ProductType=rock+shoes ASP: flusso dellapplicazione

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

Stateless Ripresentare le informazioni digitateRipresentare le informazioni digitate<INPUTTYPE=TEXT NAME=txtNome VALUE= NAME=txtNome VALUE= >

ASP.NET Web Form <INPUT TYPE=Text ID=txtCognome runst=server> </FORM> I controlli mantengono lo statoI controlli mantengono lo stato

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

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

Gestione dello stato Burocrazia ? Intro/Real

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

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

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)

Occhio al Publish Differenziare Test / ProduzioneDifferenziare Test / Produzione Connessioni al DBConnessioni al DB routing routing LogLog SecuritySecurity EtcEtc Exclude / Include da VS.NETExclude / Include da VS.NET

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

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

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

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

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

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

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

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

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

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

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

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

Per avere un idea ASP.NET InProcASP.NET State StoreASP.NET SQL Store Requests/Sec (2P Server)

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

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

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

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 EnableSessionState=false Se una pagina legge solamente i valori senza scriverliSe una pagina legge solamente i valori senza EnableSessionState=readonly

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

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

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)

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

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

Manage State Per Roundtrip su stessa paginaPer Roundtrip su stessa pagina Campi HiddenCampi Hidden Li conosciamoLi conosciamo ViewStateViewState

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

ViewState nella sequenza eventi Page/ Control InitVIEWSTATELoad Update input field ValidationPage_LoadEvents: _Change _Click VIEWSTATESave Render Dispose PreRender

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

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

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

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

Cripting VIEWSTATE decriptionKey ETATSWEIV Response Client ETATSWEIV Request decriptionKey VIEWSTATE SaveViewState Client LoadViewState

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

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

ViewState Performance ServerServer Disabilitabile per pagina o controlloDisabilitabile per pagina o EnableViewState = 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

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

Caching Occhio alla pronuncia Intro

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

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

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

Cache Location ServerServer ClientClient DownstreamDownstream PublicPublic NoneNone Da codiceDa codice Response.Cache.SetCacheabilityResponse.Cache.SetCacheability HttpCacheability.ServerHttpCacheability.Server HttpCacheability.ClientHttpCacheability.Client

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

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 ;

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... }}

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à

Caching API Occhio alla pronuncia Intro

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

Un esempio Cache.Add o Cache.InsertCache.Add o Cache.Insert(NomeValoreDependencyTimeTimeSpanPriorityPriorityDecayCallBack)

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

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(.....)}

Altre Informazioni Dove posso ottenere maggiori informazioniDove posso ottenere maggiori informazioni Developer resourcesDeveloper resources Microsoft Visual Studio.NETMicrosoft Visual Studio.NET Microsoft.NET Framework SDKMicrosoft.NET Framework SDK Microsoft Developer NetworkMicrosoft Developer Network

ASP.NET Managing State I vostri feedback sono importanti ScrivetemiScrivetemi Grazie della partecipazione –A presto