La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Applicazioni Web con ASP.NET Silvano Coriani Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft.

Presentazioni simili


Presentazione sul tema: "Applicazioni Web con ASP.NET Silvano Coriani Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft."— Transcript della presentazione:

1 Applicazioni Web con ASP.NET Silvano Coriani Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft Certified Trainer Microsoft Certified Solution Developer Microsoft Certified Application Developer Microsoft Certified System Engineer + Internet Microsoft Certified DataBase Administrator

2 Agenda RecallRecall HTMLHTML Applicazioni Web dinamicheApplicazioni Web dinamiche Architettura di ASP.NETArchitettura di ASP.NET Web Form (Web Control)Web Form (Web Control) La libreria System.Web.UILa libreria System.Web.UI Code-BehindCode-Behind Data BindingData Binding ASP.NET SecurityASP.NET Security

3 Protocolli TCP/IPTCP/IP Protocollo utilizzato per tutte le comunicazioni su InternetProtocollo utilizzato per tutte le comunicazioni su Internet Protocollo a due livelli: TCP e IPProtocollo a due livelli: TCP e IP Hypertext Transfer Protocol (HTTP)Hypertext Transfer Protocol (HTTP) Protocollo per lo scambio di fileProtocollo per lo scambio di file Utilizzato dai browser per accedere alle risorseUtilizzato dai browser per accedere alle risorse Si basa su TCP/IPSi basa su TCP/IP E’ StatelessE’ Stateless

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

5 Markup Language Hypertext Markup Language (HTML)Hypertext Markup Language (HTML) Creazione di pagine WebCreazione di pagine Web Si basa su tag che il browser interpreta per visualizzare il contenutoSi basa su tag che il browser interpreta per visualizzare il contenuto Dynamic HTMLDynamic HTML Client-sideClient-side Consente di manipolare la pagina sul clientConsente di manipolare la pagina sul client Extensible Markup Language (XML)Extensible Markup Language (XML) Definizione entità genericheDefinizione entità generiche Utilizzato per lo scambio di datiUtilizzato per lo scambio di dati

6 Web Browser Diversi Browser Internet Explorer 5.x 6.x Internet Explorer 4.x ActiveX Controls DHTML Netscape Navigator 4.x Netscape Navigator 3.x Microsoft WebTV VBScriptJavaScriptJava Applets CSS 2.0 XML

7 Tag HTML Ciao Ciao Ciao Ciao
Testo Testo Contenuti in un file di testoContenuti in un file di testo Memorizzati su un ServerMemorizzati su un Server Richiesti via Http dal browserRichiesti via Http dal browser Interpretati sul clientInterpretati sul client

8 Client Server Richiesta HTTP ASPengine default.asp IIS JScript VB Script Esecuzione ADO Recupero risultati Risposta HTTP ProductType=rock+shoes ASP.NET: flusso dell’applicazione

9 Response Object Consente di gestire la risposta HttpConsente di gestire la risposta Http

10 Invio dati dal browser al server Le informazioni vengono inviate a “NomePagina” sotto forma di stringheLe informazioni vengono inviate a “NomePagina” sotto forma di stringhe GETGET txtNome=xxxx&txtCognome=yyyytxtNome=xxxx&txtCognome=yyyy POSTPOST Come header HTTPCome header HTTP GET o POST?GET o POST?

11 Request Object Contiene le info del QueryStringContiene le info del QueryString <% nome=Request.QueryString(“txtNome”) cognome =Request.QueryString(“txtCognome”) Response.Write(“Ciao” & nome & cognome)%> <% nome=Request.QueryString(“txtNome”) cognome =Request.QueryString(“txtCognome”) Response.Write(“Ciao” & nome & cognome)%>

12 Request Object Contiene le info del FormContiene le info del Form <% nome=Request.Form(“txtNome”) cognome =Request.Form(“txtCognome”) Response.Write(“Ciao” & nome & cognome)%> <% nome=Request.Form(“txtNome”) cognome =Request.Form(“txtCognome”) Response.Write(“Ciao” & nome & cognome)%>

13 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 dall’utenteAd esempio riempire i campi di un form con le informazioni digitate dall’utente Es. ripresentare le informazioni digitateEs. ripresentare le informazioni digitate

14 ASP 3.0: the good Modello di programmazione sempliceModello di programmazione semplice Utilizzo di normali editor HTMLUtilizzo di normali editor HTML Possibilità di modificare i sorgenti in ogni momentoPossibilità di modificare i sorgenti in ogni momento Produzione di qualunque contenuto in rispostaProduzione di qualunque contenuto in risposta Nessuna forzatura per lo sviluppatoreNessuna forzatura per lo sviluppatore Utilizzo di nuove tecnolgie HTML 4 / CSSUtilizzo di nuove tecnolgie HTML 4 / CSS Apertura verso altre tecnologie XML / XSLTApertura verso altre tecnologie XML / XSLT

15 ASP 3.0: The bad Solo codice scriptSolo codice script Povertà di linguaggioPovertà di linguaggio Utilizzo limitato di librerieUtilizzo limitato di librerie Lentezza in esecuzione (relativa)Lentezza in esecuzione (relativa) Sorgenti non protetti dall’infrastrutturaSorgenti non protetti dall’infrastruttura Overlap fra codice e HTMLOverlap fra codice e HTML Debug e gestione erroriDebug e gestione errori Non abbiamo oggetti, solo stringheNon abbiamo oggetti, solo stringhe Scrivere codice per qualsiasi cosaScrivere codice per qualsiasi cosa Mantenere lo stato dei campiMantenere lo stato dei campi Validazione client e server differentiValidazione client e server differenti Output differente IE / NS / DeviceOutput differente IE / NS / Device Nessuna interazione con il SONessuna interazione con il SO IIS/W2K per settaggi applicativiIIS/W2K per settaggi applicativi

16 Soluzione ASP.NETASP.NET Linguaggio potente (VB, C#)Linguaggio potente (VB, C#) CompilazioneCompilazione AutomaticaAutomatica E modifiche del codice sempre ammesseE modifiche del codice sempre ammesse Web Form e ControlliWeb Form e Controlli Proprietà, Metodi, EventiProprietà, Metodi, Eventi Le pagine sono classiLe pagine sono classi Debug e gestione errori completaDebug e gestione errori completa Web.config per settaggi applicativiWeb.config per settaggi applicativi Web Service integratiWeb Service integrati Separazione fra codice e HTML (Code Behind)Separazione fra codice e HTML (Code Behind)

17 ASP.NET Framework Piattaforma nella piattaformaPiattaforma nella piattaforma Facilita la costruzione di applicazioni server- sideFacilita la costruzione di applicazioni server- side Basate su HTTP, HTML, XML e SOAPBasate su HTTP, HTML, XML e SOAP Processa richiesta HTTPProcessa richiesta HTTP E fornisce risposte HTTPE fornisce risposte HTTP Il web è sempre lo stessoIl web è sempre lo stesso

18 ASP.NET Page Framework ASP.NET Web Forms XML Web Services Windows COM + Services Visual Studio.NET Common Language Runtime (CLR).NET Framework classes ADO.NET e XML WindowsForms Common language specification (CLS) C# J# J# VB.NET

19 ASP.NET Web Form I controlli mantengono lo statoI controlli mantengono lo stato

20 Dynamic Compilation ASPXFile Request ASPXEngine Parsing Class File su DiscoGenerazione PageClass Istanza, Esecuzione e Rendering Response Request Creazione Istanza Response Code- behind file

21 ASP.NET Internals (IIS 5 – Win 2000) INETINFO.exe ISAPI Extension Manager ASPNET_WP.EXE Worker Process HTTP Request.ASPX.ASMX.ASHX.DISCO.SOAP ASP.DLL ASP.NET Pipeline INETINFO.exe ISAPI Extension Manager ASPNET_ISAPI.DLL ASP.NET non usa ISAPI/ASPASP.NET non usa ISAPI/ASP ISAPI extension redirige le richieste sul worker processISAPI extension redirige le richieste sul worker process Named Pipe

22 ASP.NET Internals (IIS 6 – Win 2003) WWW Service Config Mgr Process Mgr HTTP.sys Web Garden W3WP.exe ISAPI Extensions (ASP, etc.) ISAPI Extensions (ASP, etc.) ISAPI Filters Application Pool 2 W3WP.exe ASP.NET ISAPI CLR Application Domain W3WP.exe ASP.NET ISAPI CLR Application Domain Application Pool 1 metabase INETINFO

23 ASP.NET Internals Le richieste sono processate nella pipeline all’interno del worker threadLe richieste sono processate nella pipeline all’interno del worker thread La pipeline contiene classi HttpRuntimeLa pipeline contiene classi HttpRuntime I moduli sono interceptor opzionaliI moduli sono interceptor opzionali HttpContext è la classe accessibile nella pipelineHttpContext è la classe accessibile nella pipeline ASPNET_WP.EXE HttpRuntime Class Modulo 1 Modulo 2 HTTP Handler Pagina1.aspx HttpRuntime Class Modulo 1 Modulo 2 HTTP Handler Pagina2.aspx ASP.NET worker thread 1 ASP.NET worker thread 2

24 HttpContext Property TYPENameDescrizione HttpContextCurrent Contesto corrente HttpRequestRequest Richiesta Http HttpResponseResponse Risposta Http HttpServerUtilityServer URL Cracking HttpSessionStateSession Sessione per client HttpApplicationStateApplication Property Bag applicativa HttpApplicationApplicationInstance Contesto Applicativo IHttpHandlerHandler Handler della chiamata IDictionaryItems Property Bag per richiesta ExceptionError Primo errore incontrato IPrincipalUser Security ID del chiamante

25 Compilazione automatica Supporto per la compilazione del sorgente just-in-timeSupporto per la compilazione del sorgente just-in-time Auto compilazione per.aspx.ascx.asmx.ashxAuto compilazione per.aspx.ascx.asmx.ashx L’assembly generato viene memorizzato in una directory dietro le quinteL’assembly generato viene memorizzato in una directory dietro le quinte Reference automatica agli assembly comuniReference automatica agli assembly comuni Gli altri assembly sono referenziabili con direttive nella paginaGli altri assembly sono referenziabili con direttive nella pagina Shadow-copying per DLL (sovrascrivibili)Shadow-copying per DLL (sovrascrivibili)

26 System.Web.UI.Page Classe da cui vengono ereditati i file.aspxClasse da cui vengono ereditati i file.aspx Si possono costruire variabili membroSi possono costruire variabili membro HTML diventa parte del metodo RenderHTML diventa parte del metodo Render Il codice di rendering diventa parte del metodo RenderIl codice di rendering diventa parte del metodo Render WebForm e Controlli Server-side sono costruiti sulla classe PageWebForm e Controlli Server-side sono costruiti sulla classe Page

27 Direttive A livello di paginaA livello di controlla la controlla la compilazione Molti attributiMolti per referenziare un assembly per referenziare un assembly esterno Come /r nei compilatori VBC.exe e CSC.exeCome /r nei compilatori VBC.exe e per importare un per importare un namespace Imports di VB.NETImports di VB.NET using di C#;using di C#;

28 @Page ElencoCorsi.aspx ---codice--- Referenzia l’Assembly GestioneCorsi.dll Codice VB (uno solo per pagina) Dichiarazione variabili obbligatoria (abilitare sempre) Queste direttive corrispondono a Vbc.exe /optionexplicit+ /r:GestioneCorsi.dll ElencoCorsi_aspx

29 Direttive Language Linguaggio utilizzato Buffer Response Buffering True/False ContentType Header Content Type MIME EnableSessionState Session True/False EnableViewState ViewState True/False Src File sorgente per code-behind Inherits Base Class diverse da Page ErrorPage URL per eccezioni non gestite Explicit Option Explicit True/False Strict Option Strict True/False Debug Compilazione con simboli True/False Trace Tracing True/False CompilerOptions Switch per VBC.exe o CSC.exe

30 Code Behind Code behindCode behind File separato per il codiceFile separato per il codice Compilazione automaticaCompilazione Src=“Codice.vb/cs” Src=“Codice.vb/cs” Inhrerits=“Classe” Nel file Codice.vbNel file Codice.vb Public class ClassePublic class Classe Inherits System.Web.UI.PageInherits System.Web.UI.Page Poi il codice da usare con la paginaPoi il codice da usare con la pagina EventiEventi FunzioniFunzioni Visual Studio.aspx.vb |.aspx.csVisual Studio.aspx.vb |.aspx.cs

31 Ereditarietà Il Code Behind non è un’appendice della pagina ma la classe da cui viene ereditata la paginaIl Code Behind non è un’appendice della pagina ma la classe da cui viene ereditata la pagina

32 Schemino System.Web.UI.Page Public Class Codice Inherits Inherits=“Codice”.dll.VB.aspx public Event EventHandler Load public bool IsPostBack {get;} public HttpRequest {get;} public HttpResponse {get;} Public txtName as S.W.U.TextBox Sub Page_Load(x,y) Response.Write “x” End Sub La classe contiene le interfacce della classe base + txtName La pagina eredita la Classe Codice Quindi le nuove proprietà, eventi e metodi rispetto a Page

33 Ancora Code Behind Con l’attributo Src il Code Behind viene compilato a run-timeCon l’attributo Src il Code Behind viene compilato a run-time Si può pre-compilare il.vb|.csSi può pre-compilare il.vb|.cs Copiarlo nella directory binCopiarlo nella directory bin In produzione precompilareIn produzione precompilare

34 Server Controls Oggetti programmabiliOggetti programmabili Attributo runat=“server”Attributo runat=“server” Mantengono lo stato delle infoMantengono lo stato delle info Generano HTML per il clientGenerano HTML per il client Scatenano eventiScatenano eventi EspongonoEspongono ProprietàProprietà MetodiMetodi

35 Server Controls HTML ControlHTML Control Sintassi HTMLSintassi HTML Mappati 1:1 con controlli HTMLMappati 1:1 con controlli HTML Namespace System.Web.UI.HtmlControlsNamespace System.Web.UI.HtmlControls Web ControlsWeb Controls Sintassi diversaSintassi diversa Tutti gli HTML ControlTutti gli HTML Control E controlli avanzatiE controlli avanzati

36 HTML Control Mappano i tag HTML 1:1Mappano i tag HTML 1:1 Lavorano bene con gli Editor attualiLavorano bene con gli Editor attuali Ma il modello ad oggetti non è strongly-typedMa il modello ad oggetti non è strongly-typed Ad esempioAd esempio txtName.Value = “Roberto”txtName.Value = “Roberto” mama txtName.SetAttribute("bgcolor", "red")txtName.SetAttribute("bgcolor", "red")

37 Web Control Modello ad oggetti consistente e strongly-typedModello ad oggetti consistente e strongly-typed txtName.Text = “Roberto”txtName.Text = “Roberto” txtName.BackColor = Color.RedtxtName.BackColor = Color.Red Miglior supporto per VS.NET DesignerMiglior supporto per VS.NET Designer Rendering differente per browserRendering differente per browser Esempio: LabelEsempio: Label Funzionalità differenti per browserFunzionalità differenti per browser Esempio: Validation ControlEsempio: Validation Control

38 Alcuni esempi

39 Altri Web Control List ControlList Control Iterativi su una base di datiIterativi su una base di dati DropDownList, ListBoxDropDownList, ListBox RadioButtonList, CheckBoxListRadioButtonList, CheckBoxList Repeater, DataList, DataGridRepeater, DataList, DataGrid Validation ControlValidation Control Ci arriviamo fra poco…Ci arriviamo fra poco… Controlli complessi (Rich Control)Controlli complessi (Rich Control) Calendar, AdRotator, XmlCalendar, AdRotator, Xml Mobile Control: per device e telefoniniMobile Control: per device e telefonini Internet Explorer ControlInternet Explorer Control

40 Dati VariabiliVariabili Proprietà di oggettiProprietà di oggetti N.B. Anche la pagina è un oggettoN.B. Anche la pagina è un oggetto Risultati di funzioni o metodiRisultati di funzioni o metodi ArrayArray DatabaseDatabase XMLXML WebWeb

41 Data Binding Aggancio fra un elemento visivo a un datoAggancio fra un elemento visivo a un dato In modo dichiarativoIn modo dichiarativo Molto sempliceMolto semplice Molto veloceMolto veloce Molti datasource supportatiMolti datasource supportati Tecnologia aperta anche per DBTecnologia aperta anche per DB AutomatizzataAutomatizzata Non come in VB (per fortuna)Non come in VB (per fortuna) Più semplice agganciare codice ottimizzato per insert/update/deletePiù semplice agganciare codice ottimizzato per insert/update/delete

42 Codice Dichiarazione di binding sempliceDichiarazione di binding semplice Poi valutazione delle espressioniPoi valutazione delle espressioni Page.DataBind()Page.DataBind() Valuta tutte le espressioni di bindingValuta tutte le espressioni di binding Metodo DataBind() su tutti i controlliMetodo DataBind() su tutti i controlli E valorizza i E valorizza i

43 Data Binding “multiplo” Controlli che supportano la proprietà DataSourceControlli che supportano la proprietà DataSource Possono essere agganciati a oggetti che supportano IEnumerable o ICollectionPossono essere agganciati a oggetti che supportano IEnumerable o ICollection I controlli supportano il metodo DataBind()I controlli supportano il metodo DataBind() Che valuta il loro DataSource e popola il controlloChe valuta il loro DataSource e popola il controllo Invoca anche il metodo DataBind() di tutti i controlli ChildrenInvoca anche il metodo DataBind() di tutti i controlli Children Come per la PageCome per la Page

44 Controlli bindabili HtmlSelectCheckBoxListRadioButtonListComboBoxDropDownListListBoxDataGridDataListRepeater ArrayArrayListHashTableQueueSortedListStackStringCollectionDataViewDataTableDataSetSqlDataReaderOleDbDataReader Bindabili DataTextField Associa il campo da visualizzare DataValueField Associa il campo da associare

45 DataReader Per fare estrazione e presentazione di datiPer fare estrazione e presentazione di dati Tipicamente usato nell’evento LoadTipicamente usato nell’evento Load Chiamare DataBind() prima di chiudere la connessioneChiamare DataBind() prima di chiudere la connessione Si può sempre usareSi può sempre usare DataTextFieldDataTextField Associa il campo da visualizzareAssocia il campo da visualizzare DataValueFieldDataValueField Associa il campo da associareAssocia il campo da associare

46 DataView Rappresenta una vista su una DataTableRappresenta una vista su una DataTable DefaultView su ogni DataTableDefaultView su ogni DataTable Custom DataViewCustom DataView Per filtri e sort su una DataTablePer filtri e sort su una DataTable Bindando una DataTable si binda in realtà la DefaultView sulla tabellaBindando una DataTable si binda in realtà la DefaultView sulla tabella Bindando il DataSet si binda in realtà la DefaultView della prima tableBindando il DataSet si binda in realtà la DefaultView della prima table

47 DataGrid Fornisce una rappresentazione tabellare dei datiFornisce una rappresentazione tabellare dei dati Formata da colonne, header e footerFormata da colonne, header e footer Colonne autogenerabiliColonne autogenerabili O esplicitamente dichiarate con BoundColumnsO esplicitamente dichiarate con BoundColumns Visualizzazione personalizzabileVisualizzazione personalizzabile Occhio al VIEWSTATEOcchio al VIEWSTATE

48 DataGrid con Editing EditCommandColumn visualizza link perEditCommandColumn visualizza link per EditCommand, UpdateCommand, CancelCommandEditCommand, UpdateCommand, CancelCommand OnEditCommand per gestire l’evento di editingOnEditCommand per gestire l’evento di editing La DataGrid mantiene la proprietà EditItemIndexLa DataGrid mantiene la proprietà EditItemIndex Riga da editareRiga da editare -1 se in modalità visualizzazione-1 se in modalità visualizzazione DataGridCommandEventArgs viene passato ai vari handlerDataGridCommandEventArgs viene passato ai vari handler DataKeyField deve contenere la chiave primariaDataKeyField deve contenere la chiave primaria Nell’handler UpdateCommand si usa DataKeyField per accedere alla Primary Key da modificareNell’handler UpdateCommand si usa DataKeyField per accedere alla Primary Key da modificare

49 Templated Control Forniscono un meccanisco per separare la visualizzazione di un controllo dalle sue funzionalitàForniscono un meccanisco per separare la visualizzazione di un controllo dalle sue funzionalità Un templated control gestisce i dati e il layout ma usa un template da creare per il rendering attuale dei datiUn templated control gestisce i dati e il layout ma usa un template da creare per il rendering attuale dei dati

50 Template DataList, Repeater e DataGridDataList, Repeater e DataGrid Consentono di utilizzare un template per la visualizzazione dei datiConsentono di utilizzare un template per la visualizzazione dei dati Forniscono l’involucro per visualizzare i datiForniscono l’involucro per visualizzare i dati Gestiscono il layout e il binding in automaticoGestiscono il layout e il binding in automatico Sfruttano il template fornitoSfruttano il template fornito La riga “in binding” è accessibile tramite Container.DataItemLa riga “in binding” è accessibile tramite Container.DataItem

51 Templated Control e Template DataGridColumns DataList HeaderTemplate ItemTemplate AlternatingItemTemplate SeparatorTemplate SelectedItemTemplate EditItemTemplate FooterTemplate Repeater HeaderTemplate ItemTemplate AlternatingItemTemplate SeparatorTemplate FooterTemplate TemplateColumn HeaderTemplate ItemTemplate EditItemTemplate FooterTemplate ItemTemplateVisualizzazione dell’elemento AlternatingItemTemplateVisualizzazione dell’elemento pari SeparatorTemplateVisualizzazione del separatore di riga SelectedItemTemplateVisualizzazione dell’elemento selezionato EditItemTemplateVisualizzazione della colonna in Editing

52 DataBinder vs Container Container.DataItemContainer.DataItem Ritorna un Object genericoRitorna un Object generico Occorre effettuare il castOccorre effettuare il cast DataBinder.EvalDataBinder.Eval Usa ReflectionUsa Reflection Per fare il parse e l’evaluatePer fare il parse e l’evaluate Dell’espressione di bindingDell’espressione di binding Evitando il castEvitando il cast

53 Repeater Contenitore genericoContenitore generico Itera sui datiItera sui dati Eseguendo il rendering dell’ItemTemplate per ogni elemento della collezione DataSourceEseguendo il rendering dell’ItemTemplate per ogni elemento della collezione DataSource Utile per avere controllo completo sul rendering dei datiUtile per avere controllo completo sul rendering dei dati

54 DataList Visualizza i dati in una listaVisualizza i dati in una lista Utile per visualizzazioni a listaUtile per visualizzazioni a lista Il default è righe/colonneIl default è righe/colonne Simile alla DataGrid maSimile alla DataGrid ma Più semplice da usarePiù semplice da usare Più leggere e quindi velocePiù leggere e quindi veloce Richiede almeno un ItemTemplateRichiede almeno un ItemTemplate Ogni template ha un suo stileOgni template ha un suo stile HeaderStyleHeaderStyle ItemStyleItemStyle

55 ASP.NET XML Server Control Gestisce l’output di XMLGestisce l’output di XML Trasformazione opzionale XSL/TTrasformazione opzionale XSL/T Bind verso file XML o DatabaseBind verso file XML o Database Caching built-in per la trasformazioneCaching built-in per la trasformazione EfficenteEfficente

56 Eventi Page EventsPage Events La pagina è una classe quindi scatena eventiLa pagina è una classe quindi scatena eventi Page_InitPage_Init Page_LoadPage_Load Page_UnloadPage_Unload La routing di evento riceve gli argomenti.NETLa routing di evento riceve gli argomenti.NET Control EventsControl Events Quasi sempre Change e ClickQuasi sempre Change e Click SelectedIndexChange per ListBoxSelectedIndexChange per ListBox

57 Definizione Evento onClick verrebbe inviato al clientonClick verrebbe inviato al client In generale ogni attributo non utilizzato server- side o sconosciuto viene inviato al clientIn generale ogni attributo non utilizzato server- side o sconosciuto viene inviato al client Visual Studio inveceVisual Studio invece VB: AddHandler b1_Click, AddressOf btn1_ClickVB: AddHandler b1_Click, AddressOf btn1_Click C#: b1.Click += new EventHandler(btn1_Click)C#: b1.Click += new EventHandler(btn1_Click)

58 Viene prima il click o change ? Sequenza esattaSequenza esatta Controlli_InitControlli_Init Validazioni...vediamo fra pocoValidazioni...vediamo fra poco Page_InitPage_Init Page_LoadPage_Load Controlli_LoadControlli_Load _Changed_Changed Per tutti i controlli modificatiPer tutti i controlli modificati In ordine randomIn ordine random _Click_Click Page_UnloadPage_Unload Render verso il browserRender verso il browser

59 GET o POST If Request.ServerVariables(“HTTP_METHOD”) diventaIf Request.ServerVariables(“HTTP_METHOD”) diventa If Page.IsPostBackIf Page.IsPostBack Proprieta della classe PageProprieta della classe Page True se POSTTrue se POST False se GETFalse se GET

60 Auto POST Esempio per combo boxEsempio per combo box Il Changed verrà processato al successivo postIl Changed verrà processato al successivo post Viene eseguita immediatamente la post con codice Javascript clientViene eseguita immediatamente la post con codice Javascript client Non potrebbe essere altrimentiNon potrebbe essere altrimenti Necessita di Browser scriptabileNecessita di Browser scriptabile

61 Global.asax Architettura completamente rivistaArchitettura completamente rivista Quindi qualche evento in piùQuindi qualche evento in più Si intercettano sempre conSi intercettano sempre con Sub Application_qualcosaSub Application_qualcosa A cui vengono passati i soliti parametriA cui vengono passati i soliti parametri (x as Object, e as EventArgs)(x as Object, e as EventArgs)

62 Web.Config File di configurazioneFile di configurazione In formato XMLIn formato XML Occhio !!! È case sensitiveOcchio !!! È case sensitive Per impostare parametri applicativiPer impostare parametri applicativi Opzioni di compilazioneOpzioni di compilazione SicurezzaSicurezza Gestione delle sessioniGestione delle sessioni Moduli HTTP (HttpModule) customModuli HTTP (HttpModule) custom Handler HTTPHandler HTTP Sovrascrive le impostazioni di defaultSovrascrive le impostazioni di default X:\WINNT\Microsoft.NET\Framework\ \CONFIG\Machine.ConfigX:\WINNT\Microsoft.NET\Framework\ \CONFIG\Machine.Config

63 Web.Config E valori customE 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 strConn = Configuration.AppSettings(“DSN”)strConn = Configuration.AppSettings(“DSN”)

64 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

65 Session L’oggetto Session viene appoggiato nella memoria del WP di ASP.NETL’oggetto Session viene appoggiato nella memoria del WP di ASP.NET ProPro VelocissimeVelocissime ControContro Necessitano di cookie abilitati sul clientNecessitano di cookie abilitati sul client Se crasha l’applicazione le session si perdonoSe crasha l’applicazione le session si perdono Non si può fare load balancing veroNon si può fare load balancing vero

66 Session senza Cookie L’oggetto Session viene appoggiato nella memoria del WP di ASP.NETL’oggetto Session viene appoggiato nella memoria del WP di ASP.NET ProPro VelocissimeVelocissime Non necessitano di cookie abilitati sul clientNon necessitano di cookie abilitati sul client ControContro Se crasha l’applicazione le session si perdonoSe crasha l’applicazione le session si perdono Non si può fare load balancing veroNon si può fare load balancing vero

67 Session fuori dal WP L’oggetto Session viene appoggiato nella memoria del servizio ASPStateL’oggetto Session viene appoggiato nella memoria del servizio ASPState ProPro Se crasha l’applicazione le session sono salveSe crasha l’applicazione le session sono salve Si può fare load balancing vero con N IIS che si appoggiano ad un solo ASPStateSi può fare load balancing vero con N IIS che si appoggiano ad un solo ASPState “Velocino”“Velocino” ControContro Se crasha ASPState si perdono tutte le SessionSe crasha ASPState si perdono tutte le Session

68 External Session State Far partire il servizio ASPState sulla macchina indicata nel config.webFar partire il servizio ASPState sulla macchina indicata nel config.web net start aspnet_statenet start aspnet_state Necessita di Premium EditionNecessita di Premium Edition Altri 19 Mb di downloadAltri 19 Mb di download Tip: Se conosciuto meglio indicare l’indirizzo IPTip: Se conosciuto meglio indicare l’indirizzo IP Tip2: Configurazione diversa fra test e produzioneTip2: Configurazione diversa fra test e produzione

69 Session fuori dal WP ProPro Se crasha l’applicazione le session sono salveSe crasha l’applicazione le session sono salve Si può fare load balancing vero con N IIS che si appoggiano ad un solo SQL ServerSi può fare load balancing vero con N IIS che si appoggiano ad un solo SQL Server SQL in Cluster per Fault-toleranceSQL in Cluster per Fault-tolerance ControContro Più lentoPiù lento Configurare SQL in ClusterConfigurare SQL in Cluster

70 Custom User Control Creazione di controlli personalizzatiCreazione di controlli personalizzati.ascx.ascx Da riutilizzare nelle pagine ASPXDa riutilizzare nelle pagine ASPX Simili alle “vecchie” #INCLUDESimili alle “vecchie” #INCLUDE Ma sono classiMa sono classi Quindi espongonoQuindi espongono ProprietàProprietà MetodiMetodi EventiEventi

71 User Controls Language=“vb” Inserire i controlliInserire i controlli Get e Set per esporre i valori dei controlliGet e Set per esporre i valori dei controlli Nella Pagina che li utilizzaNella Pagina che li utilizza Utilizzo dei valori interni ctlNome.xxxUtilizzo dei valori interni ctlNome.xxx

72 Caricare un controllo a RunTimeCaricare un controllo a RunTime Page.LoadControl(string source)Page.LoadControl(string source) CustomizzarloCustomizzarlo Dim ctl1 As UserControlDim ctl1 As UserControl ctl1 = LoadControl(“Toolbar.ascx")ctl1 = LoadControl(“Toolbar.ascx") CType(ctl1, (Toolbar_ascx)).Titolo = “Home Page”CType(ctl1, (Toolbar_ascx)).Titolo = “Home Page” Caricamento nella gerarchia della paginaCaricamento nella gerarchia della pagina Page.Controls.Add (ctl1)Page.Controls.Add (ctl1) Ancora User Controls

73 Componenti Sono assembly.NET quindi creareSono assembly.NET quindi creare.VB o.CS.VB o.CS Namespace myCorsiNamespace myCorsi Public Class AttiviPublic Class Attivi Public Function getCorsi(...)Public Function getCorsi(...) ………… CompilazioneCompilazione Vbc /t:library /out:myCorsi.dll myCorsi.vbVbc /t:library /out:myCorsi.dll myCorsi.vb Con le librerie utilizzateCon le librerie utilizzate E copiarlo nella directory BinE copiarlo nella directory Bin

74 Componenti Nella Pagina che li utilizzaNella Pagina che li utilizza Namespace=“myCorsi” Namespace=“myCorsi” % Dim x as New myCorsi.AttiviDim x as New myCorsi.Attivi ds = x.GetCorsi(….)ds = x.GetCorsi(….) Oppure copiarlo fuori dalla BinOppure copiarlo fuori dalla Bin E usare la direttiva AssemblyE usare la direttiva Assembly Visual Studio automatizza il tuttoVisual Studio automatizza il tutto

75 Caching Il miglior modo di ottimizzare un’applicazione è non eseguire il codiceIl miglior modo di ottimizzare un’applicazione è non eseguire il codice 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

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

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

78 Data Caching Application StateApplication State ApplicationApplication Memoria condivisa per tutta l’applicazioneMemoria condivisa per tutta l’applicazione Accesso tramite Nome/ValoreAccesso tramite Nome/Valore Cachare i dati usati frequentementeCachare i dati usati frequentemente Esempio: Elenco prodottiEsempio: Elenco prodotti Non usarla per dati temporaneiNon usarla per dati temporanei Difficile impostare una scadenzaDifficile impostare una scadenza Esempio: L’elenco prodotti cambiaEsempio: L’elenco prodotti cambia

79 Data Caching – Cache API Pensata per dati temporaneiPensata per dati temporanei Oggetto CacheOggetto Cache Memoria condivisa per tutta l’applicazioneMemoria condivisa per tutta l’applicazione Accesso tramite Nome/ValoreAccesso tramite Nome/Valore Non è il nuovo oggetto ApplicationNon è il nuovo oggetto Application Cachare i dati usati di frequenteCachare i dati usati di frequente Gli item usati “poco” vengono rimossiGli item usati “poco” vengono rimossi Attenzione !!!Attenzione !!! Supporta la notifica di rimozione tramite il Delegate CacheItemRemovedCallBackSupporta la notifica di rimozione tramite il Delegate CacheItemRemovedCallBack Dipendenze (key, file, time)Dipendenze (key, file, time)

80 Cache Dependency Dependency da fileDependency da file New CacheDependency(“xxx.yyy”)New CacheDependency(“xxx.yyy”) Oppure su una directoryOppure su una directory Oppure su un’altro item in cacheOppure su un’altro item in cache Anche più di 1Anche più di 1

81 Error Debugging VS.NET per debug completo anche per ASP.NETVS.NET per debug completo anche per ASP.NET Call stack, breakpoint, watch window, eccCall stack, breakpoint, watch window, ecc ASP.NET Error Pages consento un tracking/debugging sempliceASP.NET Error Pages consento un tracking/debugging semplice Si abilita nel web.configSi abilita nel web.config O nella singola paginaO nella singola pagina

82 Error Handling.NET fornisce un meccanismo unificato per gestire gli errori.NET fornisce un meccanismo unificato per gestire gli errori Utilizzando exceptionUtilizzando exception Una call stack con tutte le informazioniUna call stack con tutte le informazioni Try/Catch/Finally/Throw in tutti i linguaggiTry/Catch/Finally/Throw in tutti i linguaggi ASP.NET fornisce anche un metodo dichiarativoASP.NET fornisce anche un metodo dichiarativo Per logging di erroriPer logging di errori Redirige automaticamente l’utente ad una pagina di gestione erroriRedirige automaticamente l’utente ad una pagina di gestione errori

83 Oppure Application_Error Scatta per tutte le eccezioni non gestiteScatta per tutte le eccezioni non gestite Accesso alla Request correnteAccesso alla Request corrente Accesso all’oggetto ExceptionAccesso all’oggetto Exception Prendere provvedimentiPrendere provvedimenti Pagina di errore genericaPagina di errore generica OppureOppure Scrivere nell’EventLogScrivere nell’EventLog Semplicissimo con la classe EventLogSemplicissimo con la classe EventLog Mandare una mailMandare una mail Semplicissimo con la classe SmtpMailSemplicissimo con la classe SmtpMail

84 In generale Da ASP.NET non vi sono vincoli sull’accesso alle classi.NETDa ASP.NET non vi sono vincoli sull’accesso alle classi.NET Un altro esempioUn altro esempio Aggiungere Counter (Performance Monitor)Aggiungere Counter (Performance Monitor) Per real-time monitoringPer real-time monitoring EsempiEsempi Accesso ad una pagina particolareAccesso ad una pagina particolare Totale iscrizioni onlineTotale iscrizioni online Totale di quello che vi pareTotale di quello che vi pare

85 ASP.NET Security

86 Token per processi e thread cmd.exe RobertoB cmd.exe RobertoB LucaR

87 Molto spesso... Il nostro codice usa array, oggetti, funzioni,... per eseguire verifiche di accessoIl nostro codice usa array, oggetti, funzioni,... per eseguire verifiche di accesso Basate suBasate su Nostri utentiNostri utenti Nostri gruppi applicativiNostri gruppi applicativi Memorizzati su DB o file di configurazioneMemorizzati su DB o file di configurazione Ci siamo quindi inventati meccanismi di autenticazione e autorizzazione proprietariCi siamo quindi inventati meccanismi di autenticazione e autorizzazione proprietari Che esulano dai meccanismi WindowsChe esulano dai meccanismi Windows

88 CLR Security Ogni Thread nel CLR ha un Security PrincipalOgni Thread nel CLR ha un Security Principal Su cui il codice può eseguire controlli di accessoSu cui il codice può eseguire controlli di accesso Un Security Principal del CLR può essereUn Security Principal del CLR può essere Un WindowsPrincipalUn WindowsPrincipal Identity e Ruoli == al sistema operativoIdentity e Ruoli == al sistema operativo Un GenericPrincipalUn GenericPrincipal Identity e Ruoli != dal sistema operativoIdentity e Ruoli != dal sistema operativo Un Security Principal deve avere almeno un’identityUn Security Principal deve avere almeno un’identity WindowsIdentityWindowsIdentity GenericIdentityGenericIdentity

89 Applicazione.NET.NetApp.exe RobertoB GI = New GenericIdentity “MioUtente” User = GI RobertoB MioUtente CLR Windows If User.Name = “MioUtente” then eseguo...

90 ASP.NET La configurazione determina il PrincipalLa configurazione determina il Principal Del thread del SODel thread del SO Del thread del CLRDel thread del CLR Sono ortogonaliSono ortogonali IIS fornisce il token del thread del SOIIS fornisce il token del thread del SO L’autenticazione IIS si configura con il metabaseL’autenticazione IIS si configura con il metabase ASP.NET fornisce il principal per il thread del CLRASP.NET fornisce il principal per il thread del CLR L’autenticazione ASP.NET si configura con il web.configL’autenticazione ASP.NET si configura con il web.config

91 .ASPX Quindi di default Client Sist. Oper. I/O Servizi ecc. IIS Anon. System ASP.NET ASPNET IUSR_xxx ASPNET Thread Process

92 .ASPX Client Sist. Oper. I/O Servizi ecc. IIS Anon. System ASP.NET ASPNET IUSR_xxx SYSTEM Thread Process

93 .ASPX Anche se IIS blocca Anonimo Client Sist. Oper. I/O Servizi ecc. IIS Anon. System ASP.NET ASPNET RobertoB SYSTEM Thread Process

94 ASP.NET Impersonation Far passare il token di IIS sul thread di ASPNET_WP.exeFar passare il token di IIS sul thread di ASPNET_WP.exe

95 .ASPX Impersonation Client Sist. Oper. I/O Servizi ecc. IIS Anon. System ASP.NET ASPNET IUSR_xxx IUSR_xxx Thread Process

96 .ASPX se Blocco Anonimo Client Sist. Oper. I/O Servizi ecc. IIS Anon. System ASP.NET ASPNET RobertoB RobertoB Thread Process

97 Impersonation Si può impersonare anche un utente applicativo per tutta l’applicazioneSi può impersonare anche un utente applicativo per tutta l’applicazione Per usare un solo utente che rappresenta l’applicazione semplificando la gestione della sicurezza sulle risorsePer usare un solo utente che rappresenta l’applicazione semplificando la gestione della sicurezza sulle risorse Quello che si fa(ceva) per COM+Quello che si fa(ceva) per COM+

98 Authentication VS Authorization Authentication risponde alla domandaAuthentication risponde alla domanda Chi Sei ?Chi Sei ? Authorization risponde alla domandaAuthorization risponde alla domanda Cosa puoi fare ?Cosa puoi fare ? ASP.NET fornisce un’infrastruttura per entrambiASP.NET fornisce un’infrastruttura per entrambi Iniziamo dalla primaIniziamo dalla prima

99 Metodi di Authentication NoneNone Windows (default)Windows (default) Usato fino ad adessoUsato fino ad adesso FormsForms PassportPassport Si impostano nel web.configSi impostano nel web.config

100 Windows Authentication Lavora in una IntranetLavora in una Intranet Con gli account e gruppi esistentiCon gli account e gruppi esistenti Necessita di Impersonation TrueNecessita di Impersonation True Come abbiamo visto primaCome abbiamo visto prima Identity Thread CLRIdentity Thread CLR User.Identity.NameUser.Identity.Name Identity WindowsIdentity Windows WindowsIdentity.GetCurrent().NameWindowsIdentity.GetCurrent().Name Test di appartenenza a gruppiTest di appartenenza a gruppi User.IsInRole(“Domain\Group”)User.IsInRole(“Domain\Group”)

101 Web.Config Authorization Implementato da UrlAuthorizationModuleImplementato da UrlAuthorizationModule Si applica a tutte le modalità di autenticazioneSi applica a tutte le modalità di autenticazione I permessi si impostanoI permessi si impostano Con Grant/DenyCon Grant/Deny Per Utenti e RuoliPer Utenti e Ruoli In Windows Authentication gli utenti devono corrispondere a quelli del SOIn Windows Authentication gli utenti devono corrispondere a quelli del SO Authority\principalAuthority\principal Il modulo ritorna “401” su Access DeniedIl modulo ritorna “401” su Access Denied IIS gira il codice 401 in una richiesta di autenticazioneIIS gira il codice 401 in una richiesta di autenticazione

102 Web.Config Authorization

103 Forms Authentication L’autenticazione Windows non può essere usata per siti pubbliciL’autenticazione Windows non può essere usata per siti pubblici Task amministrativi enormiTask amministrativi enormi Non passa dai firewallNon passa dai firewall Conoscere il Principal Windows rende il nostro sistema più attaccabileConoscere il Principal Windows rende il nostro sistema più attaccabile ASP.NET fornisce un’infrastruttura per evitare di svilupparsi tutto a manoASP.NET fornisce un’infrastruttura per evitare di svilupparsi tutto a mano Utilizza i cookieUtilizza i cookie Automatizza le redirectionAutomatizza le redirection Mini forma di amministrazione (manuale)Mini forma di amministrazione (manuale)

104 Signout FormsAuthentication.SignOut()FormsAuthentication.SignOut() Elimina il cookieElimina il cookie E quindi l’utente perde la sua identitàE quindi l’utente perde la sua identità Nelle richieste successiveNelle richieste successive Altri metodiAltri metodi GetAuthCookieGetAuthCookie SetAuthCookieSetAuthCookie EncryptEncrypt DecryptDecrypt

105 Tips 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 l’accesso Http a tutte le parti protette per essere sicuriNegare l’accesso Http a tutte le parti protette per essere sicuri

106 Proviamo a riepilogare Windows AuthenticationWindows Authentication Per le intranetPer le intranet Impersonation TrueImpersonation True Per far passare il SecurityPrincipal di IIS a ASP.NETPer far passare il SecurityPrincipal di IIS a ASP.NET Customizzabile per i ruoliCustomizzabile per i ruoli Forms AuthenticationForms Authentication Per siti web esterniPer siti web esterni Gestione utenti automaticaGestione utenti automatica O customizzabileO customizzabile Ruoli gestibili da codiceRuoli gestibili da codice

107 Considerazioni finali ASP.NET è una libreria di classi che consente lo sviluppo di applicazioni Web dinamicheASP.NET è una libreria di classi che consente lo sviluppo di applicazioni Web dinamiche È possibile utilizzare tutte le librerie disponibili con il.NET FrameworkÈ possibile utilizzare tutte le librerie disponibili con il.NET Framework Web Form e Web Controls permettono di trattare lo sviluppo Web in modo simile a quello WindowsWeb Form e Web Controls permettono di trattare lo sviluppo Web in modo simile a quello Windows Insieme con le funzionalità di collegamento ai dati è possibile ridurre fortemente i tempi di sviluppoInsieme con le funzionalità di collegamento ai dati è possibile ridurre fortemente i tempi di sviluppo Le prestazioni del codice compilato sono molto superiori alle tecnologie interpretateLe prestazioni del codice compilato sono molto superiori alle tecnologie interpretate ASP tradizionale, PHP, ecc.ASP tradizionale, PHP, ecc.

108 Link utili MSDN Academic AllicanceMSDN Academic Allicance MSDN StudentiMSDN Studenti MSDN OnlineMSDN Online GotDotNETGotDotNET ASP.NETASP.NET Windows FormsWindows Forms DevLeapDevLeap UgiDotNetUgiDotNet

109 © Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.


Scaricare ppt "Applicazioni Web con ASP.NET Silvano Coriani Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft."

Presentazioni simili


Annunci Google