La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Applicazioni Web con ASP.NET

Presentazioni simili


Presentazione sul tema: "Applicazioni Web con ASP.NET"— 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 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

3 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

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

5 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

6 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

7 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

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

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

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

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

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

13 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”)%> >

14 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

15 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

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

17 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

18 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

19 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

20 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

21 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

22 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

23 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

24 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

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

26 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

27 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#; 

28 @Page ElencoCorsi.aspx <%@Page Language=“VB” Explicit=“True” %>
name=“GestioneCorsi” %> 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

29 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

30 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

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

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

33 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

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

35 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

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

37 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

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

39 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

40 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

41 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

42 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 <%# %>

43 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

44 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

45 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

46 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

47 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

48 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

49 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

50 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

51 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

52 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

53 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

54 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

55 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

56 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

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

58 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

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

60 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

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

62 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

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

64 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

65 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

66 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

67 Session fuori dal WP <sessionState mode=“StateServer“ timeout=“20” stateConnectionString="tcpip= :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

68 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

69 Session fuori dal WP <sessionState mode=“SQLServer“ timeout=“20” sqlConnectionString="data source= ;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

70 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

71 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

72 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

73 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

74 Componenti Nella Pagina che li utilizza
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

75 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

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

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

78 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

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

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

81 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” %>

82 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

83 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

84 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

85 ASP.NET Security

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

87 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

88 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

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

90 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

91 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

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

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

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

95 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

96 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

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

98 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

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

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

101 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

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

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

104 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

105 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

106 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

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

108 Link utili MSDN Academic Allicance MSDN Studenti MSDN Online GotDotNET
MSDN Studenti MSDN Online GotDotNET ASP.NET Windows Forms DevLeap UgiDotNet

109 © 2003-2004 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"

Presentazioni simili


Annunci Google