Applicazioni Web con ASP.NET

Slides:



Advertisements
Presentazioni simili
Gli ipertesti del World Wide Web Funzionamento e tecniche di realizzazione a cura di Loris Tissìno (
Advertisements

Elaborazione di Franco Grivet Chin
INTRODUZIONE Il framework.NET. Un po di storia Sin dalla prima versione del sistema operativo Windows (1990 circa), nacque la necessità di far comunicare.
(Appunti da Scott Mitchell, James Atkinsons - Active Server Pages 3.0 – ed. Apogeo) Le pagine ASP.
Corrado Cavalli Microsoft .NET MVP
Reporting Services - Introduzione
ISA Server 2004 Enterprise Edition Preview. ISA Server 2004.
ISA Server 2004 Configurazione di Accessi via VPN
ASP .NET & Web Service: Introduzione
Visual Studio Tools For Office 2005 Fabio Santini. NET Senior Developer Evangelist Microsoft Italy.
Crea il tuo sito con Web Matrix e il Web Hosting su ASP.NET
Consumare Web Service Andrea Saltarello
Sharepoint Gabriele Castellani
| | Microsoft Certificate Lifecycle Manager.
Branch office update – SP2. Agenda Messa in esercizio degli uffici remoti Compressione HTTP Differentiated Services Cache di BITS.
PHP.
Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006.
INTERNET : ARPA sviluppa ARPANET (rete di computer per scopi militari)
Mantenimento dello stato Laboratorio Progettazione Web AA 2009/2010 Chiara Renso ISTI- CNR -
Connessione con MySQL.
UNIVERSITÀ DEGLI STUDI DI MODENA E REGGIO EMILIA
Università degli Studi di Modena e Reggio Emilia
3° Workshop "Accessibilità: primi passi per un mondo fruibile da tutti" Alessandro Olivi Modellazione di pagine WEB e accessibilità
1 Università della Tuscia - Facoltà di Scienze Politiche.Informatica 2 - a.a Prof. Francesco Donini Active Server Pages.
UNIVERSITÀ DI PERUGIA DIPARTIMENTO DI MATEMATICA E INFORMATICA Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Perché.Net e non più COM/DCOM ? Superamento dei problemi di COM: Richiede una infrastruttura "non semplice" da ogni applicazione (ad esempio Class Factory.
CORSO DI INFORMATICA LAUREA TRIENNALE-COMUNICAZIONE & DAMS
CAPITOLO 2 INTRODUZIONE AL LINGUAGGIO JAVA E ALL'AMBIENTE HOTJAVA.
APPLICAZIONI WEB In questo corso impareremo a scrivere un'applicazione web (WA) Marco Barbato - Corso di Applicazioni Web – A.A
Università degli Studi di Modena e Reggio Emilia Facoltà di Scienze Matematiche, Fisiche e Naturali Corso di Laurea in Informatica Utilizzo di ASP.NET.
Elaborazione di Franco Grivet Chin
1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net Web Part e controlli di login Elaborazione di Franco Grivet Chin.
Introduzione ad ASP.net
1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... ASP. Net View State e controlli Elaborazione di Franco Grivet Chin.
Progettare siti con ASP.net
Corso di PHP.
C# LE BASI 2007 Prima lezione - Introduzione.
Ing. Enrico Lecchini BetaTre S.r.l.
Guida IIS 6 A cura di Nicola Del Re.
Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto.
Server Web in una rete Windows Sommario Meccanismi di accesso remoto Meccanismi di accesso remoto Introduzione ai Server Web Introduzione ai Server.
Basi di Dati e Sistemi Informativi
Sistemi Informativi sul Web
Creare pagine web Xhtlm. Struttura di una pagina.
Microsoft Office System Introduzione a XML in Office 2003.
ASP – Active Server Pages - 1 -Giuseppe De Pietro Introduzione ASP, acronimo di Active Server Pages, sta ad indicare una tecnologia per lo sviluppo di.
Applicazione Web Informatica Abacus Informatica Classe VIA 2008/2009 N.Ceccon INF (01) Revisione 4.0 settembre 2008.
ASP – Active Server Pages Introduzione Pagine Web Statiche & Dinamiche(ASP)
ASP.NET. …un po’ di ASP ASP (Active Server Pages) è una tecnologia Microsoft che consente di scrivere codice eseguibile (script) lato server, inserendo.
INTRODUZIONE A JAVASCRIPT
PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose.
Lezione 8.
Protocolli e architetture per WIS. Web Information Systems (WIS) Un Web Information System (WIS) usa le tecnologie Web per permettere la fruizione di.
JavaScript Generalità Cos'è JavaScript?
Pietro Brambati Developer Evangelist, Microsoft Blogs.msdn.com/pietrobr Internet Explorer 8 Per sviluppatori AJAX.
Pagine ASP parte 3 I data base Stefano Schacherl.
Fabrizio Felici LAMP workshop GROsseto Linux Users Group.
Internet e HTML Diffusione di informazioni mediante la rete Internet.
Introduzione a Javascript
Eprogram informatica V anno. ASP.NET Introduzione ASP.NET (Active Server Page) è il linguaggio che, sfruttando la tecnologia.NET, permette di: -scrivere.
Programmazione Web PHP e MySQL 1. 2Programmazione Web - PHP e MySQL Esempio: un blog.
Sviluppo per Pocket PC con SQL Server CE 2.0 Fabio Santini Silvano Coriani.NET Developer Evangelist Microsoft Corporation.
MySQL Database Management System
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.
Certificati e VPN.
Extension pack per IIS7 Piergiorgio Malusardi IT Pro Evangelist
Servizi Internet Claudia Raibulet
Eprogram informatica V anno.
ASP – Active Server Pages - 1 -Giuseppe Tandoi ASP – Active Server Pages Tecnologia per lo sviluppo di pagine dinamiche.
Transcript della presentazione:

Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) 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

Agenda Recall Architettura di ASP.NET Web Form (Web Control) HTML Applicazioni Web dinamiche Architettura di ASP.NET Web Form (Web Control) La libreria System.Web.UI Code-Behind Data Binding ASP.NET Security

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

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

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

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

Tag HTML Contenuti in un file di testo Memorizzati su un Server <p>Ciao Ciao</p> <br> <font color=red>Testo</font> Contenuti in un file di testo Memorizzati su un Server Richiesti via Http dal browser Interpretati sul client

ASP.NET: flusso dell’applicazione Client Server IIS http://www.dcc.com/equipment/catalog_type.asp? ProductType=rock+shoes Richiesta HTTP ASP engine JScript VB Script Esecuzione Risposta HTTP ADO default.asp Recupero risultati

Response Object Consente di gestire la risposta Http <% Response.Write(“Ciao”)%>

Invio dati dal browser al server <FORM action=“NomePagina” method=“XXX”> <INPUT TYPE=“Text” NAME=“txtNome”> <INPUT TYPE=“Text” NAME=“txtCognome”> <INPUT TYPE=“Submit”> </FORM> Le informazioni vengono inviate a “NomePagina” sotto forma di stringhe GET txtNome=xxxx&txtCognome=yyyy POST Come header HTTP GET o POST?

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

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

Stateless Ogni richiesta è a se stante Non esistono informazioni di stato in HTTP Per ogni richiesta dobbiamo preoccuparci di inviare il contenuto Ad esempio riempire i campi di un form con le informazioni digitate dall’utente Es. ripresentare le informazioni digitate <INPUT TYPE=“TEXT” NAME=“txtNome” VALUE=<%=Request.QueryString(“txtNome”)%> >

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

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

Soluzione ASP.NET Linguaggio potente (VB, C#) Compilazione Automatica E modifiche del codice sempre ammesse Web Form e Controlli Proprietà, Metodi, Eventi Le pagine sono classi Debug e gestione errori completa Web.config per settaggi applicativi Web Service integrati Separazione fra codice e HTML (Code Behind)

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

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

ASP.NET Web Form <FORM action=“NomeRisorsa” METHOD=“POST”> <INPUT TYPE=“Text” ID=“txtNome” runat=“server”> <INPUT TYPE=“Text” ID=“txtCognome” runat=“server”> <INPUT TYPE=“Submit”> </FORM> I controlli mantengono lo stato

Istanza, Esecuzione e Rendering Dynamic Compilation Code- behind file ASPX Engine Parsing Class File su Disco Generazione ASPX File Request Creazione Istanza Request Page Class Istanza, Esecuzione e Rendering Response Response

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

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

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

HttpContext Property TYPE Name Descrizione Current Request Response Contesto corrente HttpRequest Request Richiesta Http HttpResponse Response Risposta Http HttpServerUtility Server URL Cracking HttpSessionState Session Sessione per client HttpApplicationState Application Property Bag applicativa HttpApplication ApplicationInstance Contesto Applicativo IHttpHandler Handler Handler della chiamata IDictionary Items Property Bag per richiesta Exception Error Primo errore incontrato IPrincipal User Security ID del chiamante

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

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

Direttive A livello di pagina @Page controlla la compilazione Molti attributi @Assembly per referenziare un assembly esterno Come /r nei compilatori VBC.exe e CSC.exe @Import per importare un namespace Imports di VB.NET using di C#; 

@Page ElencoCorsi.aspx <%@Page Language=“VB” Explicit=“True” %> <%@Assembly name=“GestioneCorsi” %> <%@Import namespace=“Corsi” %> ---codice--- Codice VB (uno solo per pagina) Dichiarazione variabili obbligatoria (abilitare sempre) Referenzia l’Assembly GestioneCorsi.dll Queste direttive corrispondono a Vbc.exe /optionexplicit+ /r:GestioneCorsi.dll ElencoCorsi_aspx

Direttive per @Page 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

Code Behind Code behind @Page Src=“Codice.vb/cs” Inhrerits=“Classe” File separato per il codice Compilazione automatica @Page Src=“Codice.vb/cs” Inhrerits=“Classe” Nel file Codice.vb Public class Classe Inherits System.Web.UI.Page Poi il codice da usare con la pagina Eventi Funzioni Visual Studio .aspx.vb | .aspx.cs

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

Public Class Codice Inherits S.W.U.Page @Page Inherits=“Codice” Schemino .dll System.Web.UI.Page 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 .VB Public Class Codice Inherits S.W.U.Page <asp:TextBox Id=“txtName” /> La pagina eredita la Classe Codice Quindi le nuove proprietà, eventi e metodi rispetto a Page .aspx @Page Inherits=“Codice”

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

Server Controls Oggetti programmabili Attributo runat=“server” Mantengono lo stato delle info Generano HTML per il client Scatenano eventi Espongono Proprietà Metodi

Server Controls HTML Control Web Controls Sintassi HTML Mappati 1:1 con controlli HTML Namespace System.Web.UI.HtmlControls Web Controls Sintassi diversa Tutti gli HTML Control E controlli avanzati

HTML Control <input type=“text” value=“default” runat=“server” id=“txtName” > Mappano i tag HTML 1:1 Lavorano bene con gli Editor attuali Ma il modello ad oggetti non è strongly-typed Ad esempio txtName.Value = “Roberto” ma txtName.SetAttribute("bgcolor", "red")

Web Control <asp:TextBox runat=“server” id=“txtName” Text=“default”></asp:TextBox> Modello ad oggetti consistente e strongly-typed txtName.Text = “Roberto” txtName.BackColor = Color.Red Miglior supporto per VS.NET Designer Rendering differente per browser Esempio: Label Funzionalità differenti per browser Esempio: Validation Control Clean object model (unlike existing HTML om) Better error messages Uplevel/downlevel rendering In most cases, we don’t vary the rendering, but works both places

Alcuni esempi <asp:textbox /> <input type=text> <asp:button /> <input type=submit> <asp:imagebutton /> <input type=image> <asp:checkbox /> <input type=checkbox> <asp:radiobutton /> <input type=radiobutton> <asp:listbox /> <select size=“5”> <asp:dropdownlist /> <select> <asp:hyperlink /> <a href=“...”> <asp:image /> <img src=“...”> <asp:label /> <span> <asp:panel /> <div> <asp:table /> <table>

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

Dati Variabili Proprietà di oggetti Risultati di funzioni o metodi N.B. Anche la pagina è un oggetto Risultati di funzioni o metodi Array Database XML Web

Data Binding Aggancio fra un elemento visivo a un dato In modo dichiarativo Molto semplice Molto veloce Molti datasource supportati Tecnologia aperta anche per DB Automatizzata Non come in VB (per fortuna) Più semplice agganciare codice ottimizzato per insert/update/delete

Codice Dichiarazione di binding semplice <%#strDato %> <asp:Label Text=<%#strDato %> <asp:Label Text=<%#Funzione(par) %> <asp:Label Text=<%#obj.Nome %> <asp:Label Text=<%#obj.Fai(par) %> Poi valutazione delle espressioni Page.DataBind() Valuta tutte le espressioni di binding Metodo DataBind() su tutti i controlli E valorizza i <%# %>

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

Controlli bindabili Bindabili HtmlSelect CheckBoxList RadioButtonList ComboBox DropDownList ListBox DataGrid DataList Repeater Array ArrayList HashTable Queue SortedList Stack StringCollection DataView DataTable DataSet SqlDataReader OleDbDataReader Bindabili DataTextField Associa il campo da visualizzare DataValueField Associa il campo da associare

DataReader Per fare estrazione e presentazione di dati Tipicamente usato nell’evento Load Chiamare DataBind() prima di chiudere la connessione Si può sempre usare DataTextField Associa il campo da visualizzare DataValueField Associa il campo da associare

DataView Rappresenta una vista su una DataTable DefaultView su ogni DataTable Custom DataView Per filtri e sort su una DataTable Bindando una DataTable si binda in realtà la DefaultView sulla tabella Bindando il DataSet si binda in realtà la DefaultView della prima table

DataGrid Fornisce una rappresentazione tabellare dei dati Formata da colonne, header e footer Colonne autogenerabili O esplicitamente dichiarate con BoundColumns Visualizzazione personalizzabile Occhio al VIEWSTATE

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

Templated Control 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 dati

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

Templated Control e Template DataGrid Columns Repeater HeaderTemplate ItemTemplate AlternatingItemTemplate SeparatorTemplate FooterTemplate DataList HeaderTemplate ItemTemplate AlternatingItemTemplate SeparatorTemplate SelectedItemTemplate EditItemTemplate FooterTemplate TemplateColumn HeaderTemplate ItemTemplate EditItemTemplate FooterTemplate ItemTemplate Visualizzazione dell’elemento AlternatingItemTemplate Visualizzazione dell’elemento pari SeparatorTemplate Visualizzazione del separatore di riga SelectedItemTemplate Visualizzazione dell’elemento selezionato EditItemTemplate Visualizzazione della colonna in Editing

DataBinder vs Container Container.DataItem Ritorna un Object generico Occorre effettuare il cast DataBinder.Eval Usa Reflection Per fare il parse e l’evaluate Dell’espressione di binding Evitando il cast

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

DataList Visualizza i dati in una lista Utile per visualizzazioni a lista Il default è righe/colonne Simile alla DataGrid ma Più semplice da usare Più leggere e quindi veloce Richiede almeno un ItemTemplate Ogni template ha un suo stile HeaderStyle ItemStyle

ASP.NET XML Server Control <asp:xml runat=server> Gestisce l’output di XML Trasformazione opzionale XSL/T Bind verso file XML o Database Caching built-in per la trasformazione Efficente

Eventi Page Events Control Events La pagina è una classe quindi scatena eventi Page_Init Page_Load Page_Unload La routing di evento riceve gli argomenti .NET Control Events Quasi sempre Change e Click SelectedIndexChange per ListBox

Definizione Evento <input type=submit value=Premi runat=server onServerClick=“Fai”> onClick verrebbe inviato al client In generale ogni attributo non utilizzato server-side o sconosciuto viene inviato al client <asp:button value=Premi runat=server onClick=“Fai” /> Visual Studio invece VB: AddHandler b1_Click, AddressOf btn1_Click C#: b1.Click += new EventHandler(btn1_Click)

Viene prima il click o change ? Sequenza esatta Controlli_Init Validazioni...vediamo fra poco Page_Init Page_Load Controlli_Load _Changed Per tutti i controlli modificati In ordine random _Click Page_Unload Render verso il browser

GET o POST If Request.ServerVariables(“HTTP_METHOD”) diventa If Page.IsPostBack Proprieta della classe Page True se POST False se GET

Auto POST Esempio per combo box <asp:dropdownlist id=“lstCorsi” runat=“server” onSelectedIndexChanged=“lst_Change”> Il Changed verrà processato al successivo post <asp:dropdownlist id=“lstCorsi” runat=“server” autoPostBack=“True” onSelectedIndexChanged=“lst_Change”> Viene eseguita immediatamente la post con codice Javascript client Non potrebbe essere altrimenti Necessita di Browser scriptabile

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

Web.Config File di configurazione In formato XML Occhio !!! È case sensitive Per impostare parametri applicativi Opzioni di compilazione Sicurezza Gestione delle sessioni Moduli HTTP (HttpModule) custom Handler HTTP Sovrascrive le impostazioni di default X:\WINNT\Microsoft.NET\Framework\<versione>\CONFIG\Machine.Config

Web.Config E valori custom <appSettings> Nel codice Connection String Informazioni statiche che prima si mettevano in Application o su file esterni <appSettings> <add key=“cString” value=“.....” /> </appSettings> Nel codice strConn = Configuration.AppSettings(“DSN”)

Session In ASP 1/2/3 le session In ASP.NET le session Necessitano del supporto dei cookie sul client Sono single-machine e non adatte a configurazione di load-balancing Consumano molta RAM In ASP.NET le session Possono lavorare come prima oppure Non necessitare dei cookie Essere multi-machine Appoggiarsi su DB o su uno State Server

Session <sessionState mode="InProc“ timeout=“20”/> L’oggetto Session viene appoggiato nella memoria del WP di ASP.NET Pro Velocissime Contro Necessitano di cookie abilitati sul client Se crasha l’applicazione le session si perdono Non si può fare load balancing vero

Session senza Cookie <sessionState mode="InProc“ timeout=“20” cookieless=“true" /> L’oggetto Session viene appoggiato nella memoria del WP di ASP.NET Pro Velocissime Non necessitano di cookie abilitati sul client Contro Se crasha l’applicazione le session si perdono Non si può fare load balancing vero

Session fuori dal WP <sessionState mode=“StateServer“ timeout=“20” stateConnectionString="tcpip=127.0.0.1:42424 /> L’oggetto Session viene appoggiato nella memoria del servizio ASPState Pro Se crasha l’applicazione le session sono salve Si può fare load balancing vero con N IIS che si appoggiano ad un solo ASPState “Velocino” Contro Se crasha ASPState si perdono tutte le Session

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

Session fuori dal WP <sessionState mode=“SQLServer“ timeout=“20” sqlConnectionString="data source=127.0.0.1;user id=sa;password=" /> Pro Se crasha l’applicazione le session sono salve Si può fare load balancing vero con N IIS che si appoggiano ad un solo SQL Server SQL in Cluster per Fault-tolerance Contro Più lento Configurare SQL in Cluster

Custom User Control Creazione di controlli personalizzati .ascx Da riutilizzare nelle pagine ASPX Simili alle “vecchie” #INCLUDE Ma sono classi Quindi espongono Proprietà Metodi Eventi

User Controls File .ascx @Control Language=“vb” Inserire i controlli Get e Set per esporre i valori dei controlli Nella Pagina che li utilizza <%Register TagPrefix=“mio” TagName=“Nome” Src=“xxx.ascx” %> <mio:Nome id=ctlNome runat=“server” /> Utilizzo dei valori interni ctlNome.xxx

Ancora User Controls Caricare un controllo a RunTime Customizzarlo Page.LoadControl(string source) Customizzarlo Dim ctl1 As UserControl ctl1 = LoadControl(“Toolbar.ascx") CType(ctl1, (Toolbar_ascx)).Titolo = “Home Page” Caricamento nella gerarchia della pagina Page.Controls.Add (ctl1) Demo dynamic generate Same as before, but create N messages, each with color = Colors[n] Postback controls, event processing Separate instances

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

Componenti Nella Pagina che li utilizza <%@Import Namespace=“myCorsi” %> Dim x as New myCorsi.Attivi ds = x.GetCorsi(….) Oppure copiarlo fuori dalla Bin E usare la direttiva Assembly Visual Studio automatizza il tutto

Caching Il miglior modo di ottimizzare un’applicazione è non eseguire il codice Se i dati non cambiano in un arco di tempo perchè rieseguire le query ? Il codice statico è molto più veloce del codice dinamico

Cache Location <%@OutputCache Location= “ “ %> Da codice Server Client Downstream Public None Da codice Response.Cache.SetCacheability HttpCacheability.Server HttpCacheability.Client ....

Partial Caching Non è detto che si voglia sempre cachare tutta la pagina Sensato cachare solo le parti comuni Partial Page Caching Consente di cachare User Control Ognuno con criteri diversi La sintassi è identica Attributo VaryByControl Estensibile con Proprietà

Data Caching Application State Application Memoria condivisa per tutta l’applicazione Accesso tramite Nome/Valore Cachare i dati usati frequentemente Esempio: Elenco prodotti Non usarla per dati temporanei Difficile impostare una scadenza Esempio: L’elenco prodotti cambia

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

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

Error Debugging VS.NET per debug completo anche per ASP.NET Call stack, breakpoint, watch window, ecc ASP.NET Error Pages consento un tracking/debugging semplice Si abilita nel web.config <compilation debugmode="true" /> O nella singola pagina <%@ Page Debug=“true” %>

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

Oppure Application_Error Scatta per tutte le eccezioni non gestite Accesso alla Request corrente Accesso all’oggetto Exception Prendere provvedimenti Pagina di errore generica Oppure Scrivere nell’EventLog Semplicissimo con la classe EventLog Mandare una mail Semplicissimo con la classe SmtpMail

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

ASP.NET Security

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

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

CLR Security Ogni Thread nel CLR ha un Security Principal Su cui il codice può eseguire controlli di accesso Un Security Principal del CLR può essere Un WindowsPrincipal Identity e Ruoli == al sistema operativo Un GenericPrincipal Identity e Ruoli != dal sistema operativo Un Security Principal deve avere almeno un’identity WindowsIdentity GenericIdentity

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

ASP.NET La configurazione determina il Principal Sono ortogonali Del thread del SO Del thread del CLR Sono ortogonali IIS fornisce il token del thread del SO L’autenticazione IIS si configura con il metabase ASP.NET fornisce il principal per il thread del CLR L’autenticazione ASP.NET si configura con il web.config

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

<processModel userName=“SYSTEM”> Thread IIS Anon. System Client Sist. Oper. I/O Servizi ecc. IUSR_xxx ASP.NET ASPNET SYSTEM .ASPX

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

ASP.NET Impersonation Far passare il token di IIS sul thread di ASPNET_WP.exe <configuration> <system.web> <identity impersonate=“true” /> </configuration>

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

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

Impersonation Si può impersonare anche un utente applicativo per tutta l’applicazione <identity impersonate=“true” userName=“UtenteAppl” password=“Pippo” /> Per usare un solo utente che rappresenta l’applicazione semplificando la gestione della sicurezza sulle risorse Quello che si fa(ceva) per COM+

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

Metodi di Authentication None Windows (default) Usato fino ad adesso Forms Passport Si impostano nel web.config

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

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

Web.Config Authorization <configuration> <system.web> <authorization> <deny users=“?” /> <allow roles=“Miestaff\Segreteria” /> <deny users=“*” /> </authorization> </configuration>

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

Signout FormsAuthentication.SignOut() Altri metodi Elimina il cookie E quindi l’utente perde la sua identità Nelle richieste successive Altri metodi GetAuthCookie SetAuthCookie Encrypt Decrypt

Tips Usare HTTPS per Criptare il traffico di username e password Criptare i cookie persistenti su disco RedirectFromLoginPage(..., True) Su tutto il sito per evitare che il cookie di login passi in chiaro Occhio ai tag IMG e HREF Negare l’accesso Http a tutte le parti protette per essere sicuri

Proviamo a riepilogare Windows Authentication Per le intranet Impersonation True Per far passare il SecurityPrincipal di IIS a ASP.NET Customizzabile per i ruoli Forms Authentication Per siti web esterni Gestione utenti automatica O customizzabile Ruoli gestibili da codice

Considerazioni finali ASP.NET è una libreria di classi che consente lo sviluppo di applicazioni Web dinamiche È 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 Windows Insieme con le funzionalità di collegamento ai dati è possibile ridurre fortemente i tempi di sviluppo Le prestazioni del codice compilato sono molto superiori alle tecnologie interpretate ASP tradizionale, PHP, ecc.

Link utili MSDN Academic Allicance MSDN Studenti MSDN Online GotDotNET http://www.msdnaa.net MSDN Studenti http://www.microsoft.com/italy/msdn/studenti MSDN Online http://msdn.microsoft.com GotDotNET http://www.gotdotnet.com ASP.NET http://www.asp.net Windows Forms http://www.windowsforms.net DevLeap http://www.devleap.it UgiDotNet http://www.ugidotnet.org

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