109
Applicazioni Web con Applicazioni Web con ASP.NET ASP.NET Silvano Coriani Silvano Coriani ([email protected]) ([email protected]) Academic Developer Evangelist Academic Developer Evangelist Developer & Platform Evangelism Developer & Platform Evangelism Microsoft Microsoft M icrosoft icrosoft C ertified ertified T rainer rainer M icrosoft icrosoft C ertified ertified S olution olution D eveloper eveloper M icrosoft icrosoft C ertified ertified A pplication pplication D eveloper eveloper M icrosoft icrosoft C ertified ertified S ystem ystem E ngineer + ngineer + I nternet nternet M icrosoft icrosoft C ertified ertified D ata ataB ase ase A dministrator dministrator

Applicazioni Web con ASP.NET Silvano Coriani ([email protected]) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Embed Size (px)

Citation preview

Page 1: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Applicazioni Web con Applicazioni Web con ASP.NETASP.NET

Silvano Coriani Silvano Coriani ([email protected])([email protected])

Academic Developer EvangelistAcademic Developer EvangelistDeveloper & Platform EvangelismDeveloper & Platform EvangelismMicrosoftMicrosoft

MMicrosoft icrosoft CCertified ertified TTrainerrainer

MMicrosoft icrosoft CCertified ertified SSolution olution DDevelopereveloper

MMicrosoft icrosoft CCertified ertified AApplication pplication DDevelopereveloper

MMicrosoft icrosoft CCertified ertified SSystem ystem EEngineer + ngineer + IInternetnternet

MMicrosoft icrosoft CCertified ertified DDataataBBase ase AAdministratordministrator

Page 2: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

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

Page 3: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ProtocolliProtocolli• TCP/IPTCP/IP

• Protocollo utilizzato per tutte le Protocollo utilizzato per tutte le comunicazioni su Internetcomunicazioni su Internet

• Protocollo a due livelli: TCP e IP Protocollo 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 Utilizzato dai browser per accedere alle

risorserisorse• Si basa su TCP/IPSi basa su TCP/IP• E’ StatelessE’ Stateless

Page 4: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ClientClient ServerServer

Richiesta HTTPRichiesta HTTP

default.htmdefault.htm

IIS/ApacheIIS/Apache

Risposta HTTPRisposta HTTP

Request/Response HttpRequest/Response Http

Page 5: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Markup LanguageMarkup 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 Si basa su tag che il browser interpreta per

visualizzare il contenutovisualizzare 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

Page 6: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Web Browser DiversiWeb 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

VBScript JavaScript Java Applets

CSS 2.0

XML

Page 7: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Tag HTMLTag HTML<p>Ciao Ciao</p><p>Ciao Ciao</p>

<br><br>

<font color=red>Testo</font><font color=red>Testo</font>

• Contenuti in un file di testoContenuti in un file di testo• Memorizzati su un Server Memorizzati su un Server • Richiesti via Http dal browserRichiesti via Http dal browser• Interpretati sul clientInterpretati sul client

Page 8: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ClientClient ServerServer

Richiesta HTTPRichiesta HTTP

ASPASPengineengine

default.aspdefault.asp

IISIIS

JScriptJScriptVB ScriptVB ScriptEsecuzioneEsecuzione

ADOADO

Recupero risultatiRecupero risultati

Risposta HTTPRisposta HTTP

http://www.dcc.com/equipment/catalog_type.asp? http://www.dcc.com/equipment/catalog_type.asp? ProductType=rock+shoesProductType=rock+shoes

ASP.NET: flusso dell’applicazioneASP.NET: flusso dell’applicazione

Page 9: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Response ObjectResponse Object• Consente di gestire la risposta Http Consente di gestire la risposta Http

<% Response.Write(“Ciao”)%><% Response.Write(“Ciao”)%>

Page 10: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Invio dati dal browser al serverInvio dati dal browser al server<FORM action=“NomePagina” method=“XXX”><FORM action=“NomePagina” method=“XXX”>

<INPUT TYPE=“Text” NAME=“txtNome”><INPUT TYPE=“Text” NAME=“txtNome”>

<INPUT TYPE=“Text” NAME=“txtCognome”><INPUT TYPE=“Text” NAME=“txtCognome”>

<INPUT TYPE=“Submit”><INPUT TYPE=“Submit”>

</FORM></FORM>

• Le informazioni vengono inviate a Le informazioni vengono inviate a “NomePagina” sotto forma di stringhe“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?

Page 11: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Request ObjectRequest Object

• Contiene le info del QueryStringContiene le info del QueryString

<% nome=Request.QueryString("txtNome")%> <% nome=Request.QueryString("txtNome")%>

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

Page 12: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Request ObjectRequest Object

• Contiene le info del FormContiene le info del Form

<% nome=Request.Form("txtNome")%> <% nome=Request.Form("txtNome")%>

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

Page 13: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

StatelessStateless• Ogni richiesta è a se stanteOgni richiesta è a se stante• Non esistono informazioni di stato in Non esistono informazioni di stato in

HTTPHTTP• Per ogni richiesta dobbiamo Per ogni richiesta dobbiamo

preoccuparci di inviare il contenutopreoccuparci di inviare il contenuto• Ad esempio riempire i campi di un form Ad esempio riempire i campi di un form

con le informazioni digitate dall’utentecon le informazioni digitate dall’utente• Es. ripresentare le informazioni digitateEs. ripresentare le informazioni digitate<INPUT <INPUT

TYPE=“TEXT” TYPE=“TEXT”

NAME=“txtNome” NAME=“txtNome” VALUE=<VALUE=<%=Request.QueryString(“txtNome”)%>%=Request.QueryString(“txtNome”)%>

>>

Page 14: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ASP 3.0: the goodASP 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 Possibilità di modificare i sorgenti in

ogni momentoogni momento• Produzione di qualunque contenuto in Produzione di qualunque contenuto in

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

Page 15: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ASP 3.0: The badASP 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

Page 16: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

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

Page 17: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ASP.NET FrameworkASP.NET Framework

• Piattaforma nella piattaformaPiattaforma nella piattaforma• Facilita la costruzione di applicazioni Facilita la costruzione di applicazioni

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

Page 18: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ASP.NET Page FrameworkASP.NET Page Framework

ASP.NETASP.NET

Web FormsWeb Forms XML Web ServicesXML Web Services

WindowsWindows COM + ServicesCOM + Services

Visu

al Stu

dio

.NE

TV

isual S

tud

io .N

ET

Common Language Runtime (CLR)Common Language Runtime (CLR)

.NET Framework classes.NET Framework classes

ADO.NET e XMLADO.NET e XML

WindowsWindowsFormsForms

Common language specification (CLS)Common language specification (CLS)

C#C# J#J# J#J#VB.NETVB.NET

Page 19: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ASP.NET Web FormASP.NET Web Form

<FORM action=“NomeRisorsa” <FORM action=“NomeRisorsa” METHOD=“POST”>METHOD=“POST”><INPUT TYPE=“Text” ID=“txtNome” <INPUT TYPE=“Text” ID=“txtNome”

runat=“server”>runat=“server”>

<INPUT TYPE=“Text” ID=“txtCognome”<INPUT TYPE=“Text” ID=“txtCognome”

runat=“server”>runat=“server”>

<INPUT TYPE=“Submit”><INPUT TYPE=“Submit”>

</FORM></FORM>

• I controlli mantengono lo statoI controlli mantengono lo stato

Page 20: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Dynamic CompilationDynamic Compilation

ASPXASPXFileFile

RequestRequest

ASPXASPX

EngineEngine

ParsingParsing

ClassFilesu

Disco

GenerazioneGenerazione

PagePage

ClassClass Istanza, Istanza, Esecuzione Esecuzione e Renderinge Rendering

ResponseResponse

RequestRequest

CreazioneCreazioneIstanzaIstanza

ResponseResponse

Code-Code-behindbehind

filefile

Page 21: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ASP.NET Internals (IIS 5 – Win 2000)ASP.NET Internals (IIS 5 – Win 2000)

INETINFO.exeINETINFO.exe

ISAPI ISAPI Extension Extension ManagerManager

ASPNET_WP.EXEASPNET_WP.EXEWorker ProcessWorker Process

HTTP RequestHTTP Request.ASPX.ASPX

.ASMX.ASMX

.ASHX.ASHX

.DISCO.DISCO

.SOAP.SOAP

ASP.DLLASP.DLL ASP.NET ASP.NET PipelinePipeline

INETINFO.exeINETINFO.exe

ISAPI ISAPI Extension Extension ManagerManager

ASPNET_ISAPI.DLLASPNET_ISAPI.DLL

•ASP.NET non usa ISAPI/ASPASP.NET non usa ISAPI/ASP

•ISAPI extension redirige le richieste ISAPI extension redirige le richieste sul sul worker processworker process

NamedNamedPipePipe

Page 22: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ASP.NET Internals (IIS 6 – Win ASP.NET Internals (IIS 6 – Win 2003)2003)

WWW ServiceWWW

Service

Con

fig M

grC

onfig

Mgr

Proc

ess

Mgr

Proc

ess

Mgr

HTTP.sysHTTP.sys

Web GardenWeb Garden

W3WP.exeW3WP.exe

ISAPIExtensions(ASP, etc.)

ISAPIExtensions(ASP, etc.)

ISAPI FiltersISAPI Filters

Application Pool 2

Application Pool 2

W3WP.exeW3WP.exe

ASP.NET ISAPIASP.NET ISAPI

CLR Application Domain

CLR Application Domain

W3WP.exeW3WP.exe

ASP.NET ISAPIASP.NET ISAPI

CLR Application Domain

CLR Application Domain

Application Pool 1

Application Pool 1

metabase

INETINFO

Page 23: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ASP.NET InternalsASP.NET Internals• Le richieste sono processate nella pipeline Le richieste sono processate nella pipeline

all’interno del worker threadall’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 HttpContext è la classe accessibile nella

pipelinepipeline

ASPNET_WP.EXEASPNET_WP.EXE

HttpRuntimeHttpRuntimeClassClass Modulo 1Modulo 1 Modulo 2Modulo 2 HTTP HandlerHTTP Handler

Pagina1.aspxPagina1.aspx

HttpRuntimeHttpRuntimeClassClass Modulo 1Modulo 1 Modulo 2Modulo 2 HTTP HandlerHTTP Handler

Pagina2.aspxPagina2.aspx

ASP.NET worker thread 1ASP.NET worker thread 1

ASP.NET worker thread 2ASP.NET worker thread 2

Page 24: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

HttpContext PropertyHttpContext PropertyTYPETYPE NameName DescrizioneDescrizioneHttpContextHttpContext CurrentCurrent Contesto correnteContesto corrente

HttpRequestHttpRequest RequestRequest Richiesta HttpRichiesta Http

HttpResponseHttpResponse ResponseResponse Risposta HttpRisposta Http

HttpServerUtilityHttpServerUtility ServerServer URL CrackingURL Cracking

HttpSessionStateHttpSessionState SessionSession Sessione per clientSessione per client

HttpApplicationStateHttpApplicationState ApplicationApplication Property Bag applicativaProperty Bag applicativa

HttpApplicationHttpApplication ApplicationInstancApplicationInstancee

Contesto ApplicativoContesto Applicativo

IHttpHandlerIHttpHandler HandlerHandler Handler della chiamataHandler della chiamata

IDictionaryIDictionary ItemsItems Property Bag per richiestaProperty Bag per richiesta

ExceptionException ErrorError Primo errore incontratoPrimo errore incontrato

IPrincipalIPrincipal UserUser Security ID del chiamanteSecurity ID del chiamante

Page 25: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Compilazione automaticaCompilazione automatica

• Supporto per la compilazione del Supporto per la compilazione del sorgente just-in-timesorgente just-in-time

• Auto compilazione per .aspx .ascx .asmx Auto compilazione per .aspx .ascx .asmx .ashx.ashx

• L’assembly generato viene memorizzato L’assembly generato viene memorizzato in una directory dietro le quintein una directory dietro le quinte

• Reference automatica agli assembly Reference automatica agli assembly comunicomuni

• Gli altri assembly sono referenziabili Gli altri assembly sono referenziabili con direttive nella paginacon direttive nella pagina

• Shadow-copying per DLL Shadow-copying per DLL (sovrascrivibili)(sovrascrivibili)

Page 26: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

System.Web.UI.PageSystem.Web.UI.Page

• Classe da cui vengono ereditati i Classe da cui vengono ereditati i file .aspxfile .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 Il codice di rendering diventa parte del

metodo Rendermetodo Render• WebForm e Controlli Server-side sono WebForm e Controlli Server-side sono

costruiti sulla classe Pagecostruiti sulla classe Page

Page 27: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

DirettiveDirettive

• A livello di paginaA livello di pagina• @Page controlla la compilazione@Page controlla la compilazione

• Molti attributiMolti attributi

• @Assembly per referenziare un @Assembly per referenziare un assembly esternoassembly esterno• Come /r nei compilatori VBC.exe e CSC.exeCome /r nei compilatori VBC.exe e CSC.exe

• @Import per importare un namespace@Import per importare un namespace• Imports di VB.NETImports di VB.NET• using di C#; using di C#;

Page 28: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

@[email protected]

<%@Page Language=“VB” <%@Page Language=“VB” Explicit=“True” %>Explicit=“True” %>

<%@Assembly name=“GestioneCorsi” %><%@Assembly name=“GestioneCorsi” %>

<%@Import namespace=“Corsi” %><%@Import namespace=“Corsi” %>

---codice------codice---

Referenzia l’AssemblyReferenzia l’AssemblyGestioneCorsi.dllGestioneCorsi.dll

Codice VB (uno solo per Codice VB (uno solo per pagina)pagina)

Dichiarazione variabili Dichiarazione variabili obbligatoria (abilitare obbligatoria (abilitare sempre)sempre)

Queste direttive corrispondono aQueste direttive corrispondono a

Vbc.exe /optionexplicit+ /r:GestioneCorsi.dll ElencoCorsi_aspxVbc.exe /optionexplicit+ /r:GestioneCorsi.dll ElencoCorsi_aspx

Page 29: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Direttive per @PageDirettive per @PageLanguageLanguage Linguaggio utilizzatoLinguaggio utilizzato

BufferBuffer Response Buffering True/FalseResponse Buffering True/False

ContentTypeContentType Header Content Type MIMEHeader Content Type MIME

EnableSessionStateEnableSessionState Session True/FalseSession True/False

EnableViewStateEnableViewState ViewState True/FalseViewState True/False

SrcSrc File sorgente per code-behindFile sorgente per code-behind

InheritsInherits Base Class diverse da PageBase Class diverse da Page

ErrorPageErrorPage URL per eccezioni non gestiteURL per eccezioni non gestite

ExplicitExplicit Option Explicit True/FalseOption Explicit True/False

StrictStrict Option Strict True/FalseOption Strict True/False

DebugDebug Compilazione con simboli True/FalseCompilazione con simboli True/False

TraceTrace Tracing True/FalseTracing True/False

CompilerOptionsCompilerOptions Switch per VBC.exe o CSC.exeSwitch per VBC.exe o CSC.exe

Page 30: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Code BehindCode Behind

• Code behindCode behind• File separato per il codiceFile separato per il codice• Compilazione automaticaCompilazione automatica

• @Page @Page Src=“Codice.vb/cs” Src=“Codice.vb/cs” Inhrerits=“Classe”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

Page 31: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

EreditarietàEreditarietà

• Il Code Behind non è un’appendice della Il Code Behind non è un’appendice della pagina ma la classe da cui viene pagina ma la classe da cui viene ereditata la paginaereditata la pagina

Page 32: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ScheminoSchemino

System.Web.UI.PageSystem.Web.UI.Page

Public Class CodicePublic Class CodiceInherits S.W.U.PageInherits S.W.U.Page

@Page Inherits=“Codice”@Page Inherits=“Codice”

.dll.dll

.VB.VB

.aspx.aspx

public Event EventHandler Loadpublic Event EventHandler Load

public bool IsPostBack {get;}public bool IsPostBack {get;}

public HttpRequest {get;}public HttpRequest {get;}

public HttpResponse {get;}public HttpResponse {get;}

Public txtName as S.W.U.TextBoxPublic txtName as S.W.U.TextBox

Sub Page_Load(x,y)Sub Page_Load(x,y)

Response.Write “x”Response.Write “x”

End SubEnd Sub

La classe contiene le interfacce La classe contiene le interfacce della classe base + txtNamedella classe base + txtName

<asp:TextBox Id=“txtName” /><asp:TextBox Id=“txtName” />

La pagina eredita la Classe CodiceLa pagina eredita la Classe CodiceQuindi le nuove proprietà, eventiQuindi le nuove proprietà, eventie metodi rispetto a Pagee metodi rispetto a Page

Page 33: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Ancora Code BehindAncora Code Behind

• Con l’attributo Src il Code Behind viene Con l’attributo Src il Code Behind viene compilato a run-timecompilato a run-time

• Si può pre-compilare il .vb|.cs Si può pre-compilare il .vb|.cs • Copiarlo nella directory binCopiarlo nella directory bin

• In produzione precompilareIn produzione precompilare

Page 34: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Server ControlsServer 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• Espongono Espongono

• ProprietàProprietà• MetodiMetodi

Page 35: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

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

Page 36: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

HTML ControlHTML Control• <input type=“text” value=“default” <input type=“text” value=“default”

runat=“server” id=“txtName” >runat=“server” id=“txtName” >

• 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-Ma il modello ad oggetti non è strongly-

typedtyped• Ad esempioAd esempio

• txtName.Value = “Roberto”txtName.Value = “Roberto”• mama• txtName.SetAttribute("bgcolor", "red")txtName.SetAttribute("bgcolor", "red")

Page 37: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Web ControlWeb Control• <asp:TextBox runat=“server” id=“txtName” <asp:TextBox runat=“server” id=“txtName”

Text=“default”></asp:TextBox>Text=“default”></asp:TextBox>

• Modello ad oggetti consistente e strongly-Modello ad oggetti consistente e strongly-typed 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

Page 38: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

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

Page 39: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Altri Web ControlAltri Web Control• List Control List 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

Page 40: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

DatiDati

• 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

Page 41: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Data BindingData Binding

• Aggancio fra un elemento visivo a un Aggancio fra un elemento visivo a un datodato• 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 Più semplice agganciare codice ottimizzato per insert/update/deleteinsert/update/delete

Page 42: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

CodiceCodice

• Dichiarazione di binding sempliceDichiarazione di binding semplice• <%#strDato %><%#strDato %>• <asp:Label Text=<%#strDato %><asp:Label Text=<%#strDato %>• <asp:Label Text=<%#Funzione(par) %><asp:Label Text=<%#Funzione(par) %>• <asp:Label Text=<%#obj.Nome %><asp:Label Text=<%#obj.Nome %>• <asp:Label Text=<%#obj.Fai(par) %><asp:Label Text=<%#obj.Fai(par) %>

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

Page 43: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Data Binding “multiplo”Data Binding “multiplo”

• Controlli che supportano la proprietà Controlli che supportano la proprietà DataSourceDataSource

• Possono essere agganciati a oggetti che Possono essere agganciati a oggetti che supportano IEnumerable o ICollectionsupportano IEnumerable o ICollection

• I controlli supportano il metodo I controlli supportano il metodo DataBind()DataBind()• Che valuta il loro DataSource e popola il Che valuta il loro DataSource e popola il

controllocontrollo• Invoca anche il metodo DataBind() di tutti i Invoca anche il metodo DataBind() di tutti i

controlli Childrencontrolli Children• Come per la PageCome per la Page

Page 44: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Controlli bindabiliControlli bindabiliHtmlSelectHtmlSelect

CheckBoxListCheckBoxList

RadioButtonLisRadioButtonListt

ComboBoxComboBox

DropDownListDropDownList

ListBoxListBox

DataGridDataGrid

DataListDataList

RepeaterRepeater

ArrayArray

ArrayListArrayList

HashTableHashTable

QueueQueue

SortedListSortedList

StackStack

StringCollectionStringCollection

DataViewDataView

DataTableDataTable

DataSetDataSet

SqlDataReaderSqlDataReader

OleDbDataReaderOleDbDataReader

BindabiliBindabili

DataTextField DataTextField Associa il Associa il

campo dacampo da

visualizzarevisualizzare

DataValueFieldDataValueField

Associa il campo da Associa il campo da

associareassociare

Page 45: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

DataReaderDataReader

• Per fare estrazione e presentazione di Per fare estrazione e presentazione di datidati• Tipicamente usato nell’evento LoadTipicamente usato nell’evento Load• Chiamare DataBind() prima di chiudere la Chiamare DataBind() prima di chiudere la

connessioneconnessione• Si può sempre usareSi può sempre usare

• DataTextField DataTextField • Associa il campo da visualizzareAssocia il campo da visualizzare

• DataValueFieldDataValueField• Associa il campo da associareAssocia il campo da associare

Page 46: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

DataViewDataView

• 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 Bindando una DataTable si binda in realtà la

DefaultView sulla tabellaDefaultView sulla tabella• Bindando il DataSet si binda in realtà la Bindando il DataSet si binda in realtà la

DefaultView della prima tableDefaultView della prima table

Page 47: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

DataGridDataGrid

• Fornisce una rappresentazione tabellare Fornisce una rappresentazione tabellare dei datidei dati

• Formata da colonne, header e footerFormata da colonne, header e footer• Colonne autogenerabiliColonne autogenerabili• O esplicitamente dichiarate con O esplicitamente dichiarate con

BoundColumnsBoundColumns• Visualizzazione personalizzabileVisualizzazione personalizzabile• Occhio al VIEWSTATEOcchio al VIEWSTATE

Page 48: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

DataGrid con EditingDataGrid 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 DataGridCommandEventArgs viene passato ai vari handlervari handler

• DataKeyField deve contenere la chiave primariaDataKeyField deve contenere la chiave primaria• Nell’handler UpdateCommand si usa Nell’handler UpdateCommand si usa

DataKeyField per accedere alla Primary Key da DataKeyField per accedere alla Primary Key da modificaremodificare

Page 49: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Templated ControlTemplated Control

• Forniscono un meccanisco per separare Forniscono un meccanisco per separare la visualizzazione di un controllo dalle la visualizzazione di un controllo dalle sue funzionalitàsue funzionalità

• Un templated control gestisce i dati e il Un templated control gestisce i dati e il layout ma usa un template da creare layout ma usa un template da creare per il rendering attuale dei datiper il rendering attuale dei dati

Page 50: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

TemplateTemplate

• DataList, Repeater e DataGridDataList, Repeater e DataGrid• Consentono di utilizzare un template Consentono di utilizzare un template

per la visualizzazione dei datiper la visualizzazione dei dati• Forniscono l’involucro per visualizzare i Forniscono l’involucro per visualizzare i

datidati• Gestiscono il layout e il binding in Gestiscono il layout e il binding in

automaticoautomatico• Sfruttano il template fornitoSfruttano il template fornito• La riga “in binding” è accessibile La riga “in binding” è accessibile

tramite Container.DataItemtramite Container.DataItem

Page 51: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Templated Control e TemplateTemplated Control e Template

DataGridDataGridColumnsColumns

DataListDataListHeaderTemplateHeaderTemplateItemTemplateItemTemplateAlternatingItemTemplaAlternatingItemTemplateteSeparatorTemplateSeparatorTemplateSelectedItemTemplateSelectedItemTemplateEditItemTemplateEditItemTemplateFooterTemplateFooterTemplate

RepeaterRepeaterHeaderTemplateHeaderTemplateItemTemplateItemTemplateAlternatingItemTemplatAlternatingItemTemplateeSeparatorTemplateSeparatorTemplateFooterTemplateFooterTemplate

TemplateColumnTemplateColumn

HeaderTemplateHeaderTemplateItemTemplateItemTemplateEditItemTemplateEditItemTemplateFooterTemplateFooterTemplate

ItemTemplateItemTemplate Visualizzazione dell’elementoVisualizzazione dell’elementoAlternatingItemTemplateAlternatingItemTemplate Visualizzazione dell’elemento pariVisualizzazione dell’elemento pariSeparatorTemplateSeparatorTemplate Visualizzazione del separatore di rigaVisualizzazione del separatore di rigaSelectedItemTemplateSelectedItemTemplate Visualizzazione dell’elemento selezionatoVisualizzazione dell’elemento selezionatoEditItemTemplateEditItemTemplate Visualizzazione della colonna in EditingVisualizzazione della colonna in Editing

Page 52: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

DataBinder vs ContainerDataBinder vs Container

• Container.DataItem Container.DataItem • Ritorna un Object generico Ritorna 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

Page 53: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

RepeaterRepeater

• Contenitore genericoContenitore generico• Itera sui datiItera sui dati• Eseguendo il rendering Eseguendo il rendering

dell’ItemTemplate per ogni elemento dell’ItemTemplate per ogni elemento della collezione DataSourcedella collezione DataSource

• Utile per avere controllo completo sul Utile per avere controllo completo sul rendering dei datirendering dei dati

Page 54: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

DataListDataList

• 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

Page 55: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ASP.NET XML Server ControlASP.NET XML Server Control• <asp:xml runat=server><asp:xml runat=server>

• 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

Page 56: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

EventiEventi

• 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 La routing di evento riceve gli

argomenti .NETargomenti .NET

• Control EventsControl Events• Quasi sempre Change e ClickQuasi sempre Change e Click• SelectedIndexChange per ListBoxSelectedIndexChange per ListBox

Page 57: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Definizione EventoDefinizione Evento

• <input type=submit value=Premi<input type=submit value=Premirunat=server onServerClick=“Fai”>runat=server onServerClick=“Fai”>• onClick verrebbe inviato al clientonClick verrebbe inviato al client• In generale ogni attributo non utilizzato In generale ogni attributo non utilizzato

server-side o sconosciuto viene inviato al server-side o sconosciuto viene inviato al clientclient

• <asp:button value=Premi<asp:button value=Premi runat=server onClick=“Fai” /> runat=server onClick=“Fai” />

• Visual Studio invece Visual 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)

Page 58: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Viene prima il click o change ?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

Page 59: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

GET o POSTGET o POST• If If

Request.ServerVariables(“HTTP_METHORequest.ServerVariables(“HTTP_METHOD”) diventaD”) diventa

• If Page.IsPostBackIf Page.IsPostBack• Proprieta della classe PageProprieta della classe Page• True se POSTTrue se POST• False se GETFalse se GET

Page 60: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Auto POSTAuto POST• Esempio per combo boxEsempio per combo box• <asp:dropdownlist id=“lstCorsi” runat=“server” <asp:dropdownlist id=“lstCorsi” runat=“server”

onSelectedIndexChanged=“lst_Change”>onSelectedIndexChanged=“lst_Change”>• Il Changed verrà processato al successivo postIl Changed verrà processato al successivo post

• <asp:dropdownlist id=“lstCorsi” <asp:dropdownlist id=“lstCorsi” runat=“server” runat=“server” autoPostBack=“True”autoPostBack=“True” onSelectedIndexChanged=“lst_Change”>onSelectedIndexChanged=“lst_Change”>• Viene eseguita immediatamente la post con Viene eseguita immediatamente la post con

codice Javascript clientcodice Javascript client• Non potrebbe essere altrimentiNon potrebbe essere altrimenti• Necessita di Browser scriptabileNecessita di Browser scriptabile

Page 61: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Global.asaxGlobal.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)

Page 62: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Web.ConfigWeb.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\X:\WINNT\Microsoft.NET\Framework\

<versione>\CONFIG\Machine.Config<versione>\CONFIG\Machine.Config

Page 63: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Web.ConfigWeb.Config

• E valori customE valori custom• Connection StringConnection String• Informazioni statiche che prima si Informazioni statiche che prima si

mettevano in Application o su file esternimettevano in Application o su file esterni

• <appSettings><appSettings>• <add key=“cString” value=“.....” /><add key=“cString” value=“.....” />

• </appSettings></appSettings>

• Nel codiceNel codice• strConn = strConn =

Configuration.AppSettings(“DSN”)Configuration.AppSettings(“DSN”)

Page 64: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

SessionSession• In ASP 1/2/3 le session In ASP 1/2/3 le session

• Necessitano del supporto dei cookie sul Necessitano del supporto dei cookie sul clientclient

• Sono single-machine e non adatte a Sono single-machine e non adatte a configurazione di load-balancingconfigurazione 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

Page 65: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

SessionSession

<sessionState mode="InProc“ <sessionState mode="InProc“ timeout=“20”/>timeout=“20”/>

• L’oggetto Session viene appoggiato nella L’oggetto Session viene appoggiato nella memoria del WP di ASP.NETmemoria 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

Page 66: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Session senza CookieSession senza Cookie

<sessionState mode="InProc“ <sessionState mode="InProc“ timeout=“20” timeout=“20” cookieless=“true"cookieless=“true" /> />

• L’oggetto Session viene appoggiato nella L’oggetto Session viene appoggiato nella memoria del WP di ASP.NETmemoria 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

Page 67: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Session fuori dal WPSession fuori dal WP<sessionState mode=“StateServer“ <sessionState mode=“StateServer“

timeout=“20” timeout=“20” stateConnectionString="tcpip=127.0.0.1:42424 stateConnectionString="tcpip=127.0.0.1:42424 />/>

• L’oggetto Session viene appoggiato nella L’oggetto Session viene appoggiato nella memoria del servizio ASPStatememoria 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 Si può fare load balancing vero con N IIS che si

appoggiano ad un solo ASPStateappoggiano ad un solo ASPState• ““Velocino”Velocino”

• ControContro• Se crasha ASPState si perdono tutte le SessionSe crasha ASPState si perdono tutte le Session

Page 68: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

External Session StateExternal Session State• Far partire il servizio ASPState sulla Far partire il servizio ASPState sulla

macchina indicata nel config.webmacchina 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 Tip: Se conosciuto meglio indicare l’indirizzo IPl’indirizzo IP

• Tip2: Configurazione diversa fra test e Tip2: Configurazione diversa fra test e produzioneproduzione

Page 69: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Session fuori dal WPSession fuori dal WP<sessionState mode=“<sessionState mode=“SQLServerSQLServer“ “

timeout=“20” timeout=“20” sqlConnectionString="data sqlConnectionString="data source=127.0.0.1;user source=127.0.0.1;user id=sa;password="id=sa;password=" />/>

• 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 Si può fare load balancing vero con N IIS che si

appoggiano ad un solo SQL Serverappoggiano 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

Page 70: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Custom User ControlCustom 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

Page 71: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

User ControlsUser Controls• File .ascxFile .ascx• @Control Language=“vb”@Control Language=“vb”• Inserire i controlli Inserire i controlli • Get e Set per esporre i valori dei Get e Set per esporre i valori dei

controllicontrolli

• Nella Pagina che li utilizzaNella Pagina che li utilizza• <%Register TagPrefix=“mio” <%Register TagPrefix=“mio”

TagName=“Nome” Src=“xxx.ascx” %>TagName=“Nome” Src=“xxx.ascx” %>• <mio:Nome id=ctlNome runat=“server” /><mio:Nome id=ctlNome runat=“server” />• Utilizzo dei valori interni ctlNome.xxxUtilizzo dei valori interni ctlNome.xxx

Page 72: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

• Caricare un controllo a RunTimeCaricare un controllo a RunTime• Page.LoadControl(string source)Page.LoadControl(string source)

• CustomizzarloCustomizzarlo• Dim ctl1 As UserControl Dim ctl1 As UserControl • ctl1 = LoadControl(“Toolbar.ascx") ctl1 = LoadControl(“Toolbar.ascx") • CType(ctl1, (Toolbar_ascx)).Titolo = CType(ctl1, (Toolbar_ascx)).Titolo =

“Home Page”“Home Page”

• Caricamento nella gerarchia della Caricamento nella gerarchia della paginapagina• Page.Controls.Add (ctl1)Page.Controls.Add (ctl1)

Ancora User ControlsAncora User Controls

Page 73: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

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

Page 74: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ComponentiComponenti• Nella Pagina che li utilizzaNella Pagina che li utilizza

• <<%@Import Namespace=“%@Import Namespace=“myCorsimyCorsi” %” %>>

• 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

Page 75: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

CachingCaching• Il miglior modo di ottimizzare Il miglior modo di ottimizzare

un’applicazione è non eseguire il codiceun’applicazione è non eseguire il codice• Se i dati non cambiano in un arco di tempo Se i dati non cambiano in un arco di tempo

perchè rieseguire le query ?perchè rieseguire le query ?• Il codice statico è molto più veloce del Il codice statico è molto più veloce del

codice dinamicocodice dinamico

Page 76: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Cache LocationCache Location

• <%@OutputCache Location= “ “ %><%@OutputCache Location= “ “ %>• ServerServer• ClientClient• DownstreamDownstream• PublicPublic• NoneNone

• Da codiceDa codice• Response.Cache.SetCacheabilityResponse.Cache.SetCacheability

• HttpCacheability.ServerHttpCacheability.Server• HttpCacheability.ClientHttpCacheability.Client• ........

Page 77: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Partial CachingPartial Caching• Non è detto che si voglia sempre Non è detto che si voglia sempre

cachare tutta la paginacachare 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à

Page 78: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

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

Page 79: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Data Caching – Cache APIData 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 Supporta la notifica di rimozione tramite il

Delegate CacheItemRemovedCallBackDelegate CacheItemRemovedCallBack• Dipendenze (key, file, time)Dipendenze (key, file, time)

Page 80: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

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

Page 81: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Error DebuggingError Debugging• VS.NET per debug completo anche per VS.NET per debug completo anche per

ASP.NETASP.NET• Call stack, breakpoint, watch window, eccCall stack, breakpoint, watch window, ecc

• ASP.NET Error Pages consento un ASP.NET Error Pages consento un tracking/debugging semplicetracking/debugging semplice

• Si abilita nel web.configSi abilita nel web.config• <compilation debugmode="true" /><compilation debugmode="true" />

• O nella singola paginaO nella singola pagina• <%@ Page Debug=“true” %> <%@ Page Debug=“true” %>

Page 82: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Error HandlingError Handling• .NET fornisce un meccanismo unificato .NET fornisce un meccanismo unificato

per gestire gli erroriper 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 ASP.NET fornisce anche un metodo dichiarativodichiarativo• Per logging di erroriPer logging di errori• Redirige automaticamente l’utente ad una Redirige automaticamente l’utente ad una

pagina di gestione erroripagina di gestione errori

Page 83: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Oppure Application_ErrorOppure 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 generica Pagina di errore generica

• OppureOppure• Scrivere nell’Scrivere nell’EventLogEventLog

• Semplicissimo con la classe EventLogSemplicissimo con la classe EventLog• Mandare una mailMandare una mail

• Semplicissimo con la classe SmtpMailSemplicissimo con la classe SmtpMail

Page 84: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

In generaleIn generale• Da ASP.NET non vi sono vincoli Da ASP.NET non vi sono vincoli

sull’accesso alle classi .NETsull’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

Page 85: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ASP.NET SecurityASP.NET Security

Page 86: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Token per processi e threadToken per processi e thread

cmd.execmd.exe

RobertoBRobertoB

cmd.execmd.exe

RobertoBRobertoB

LucaRLucaR

Page 87: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Molto spesso...Molto spesso...

• Il nostro codice usa array, oggetti, Il nostro codice usa array, oggetti, funzioni, ... per eseguire verifiche di funzioni, ... per eseguire verifiche di accessoaccesso

• Basate su Basate 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 Ci siamo quindi inventati meccanismi di autenticazione e autorizzazione autenticazione e autorizzazione proprietariproprietari

• Che esulano dai meccanismi WindowsChe esulano dai meccanismi Windows

Page 88: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

CLR SecurityCLR Security• Ogni Thread nel CLR ha un Ogni Thread nel CLR ha un

Security PrincipalSecurity Principal• Su cui il codice può eseguire controlli di Su cui il codice può eseguire controlli di

accessoaccesso

• 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 Security Principal deve avere almeno un’identityun’identity• WindowsIdentityWindowsIdentity• GenericIdentityGenericIdentity

Page 89: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Applicazione .NET Applicazione .NET

.NetApp.exe.NetApp.exe

RobertoBRobertoB

GI = New GenericIdentity “MioUtente”User = GI

RobertoBRobertoB

MioUtentMioUtentee

CLRCLR

WindowsWindows

If User.Name = “MioUtente” theneseguo...

Page 90: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ASP.NETASP.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 L’autenticazione IIS si configura con il metabasemetabase

• ASP.NET fornisce il principal per il ASP.NET fornisce il principal per il thread del CLRthread del CLR• L’autenticazione ASP.NET si configura con il L’autenticazione ASP.NET si configura con il

web.configweb.config

Page 91: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

.ASPX.ASPX

Quindi di defaultQuindi di default

ClientClient

Sist.Sist.Oper.Oper.

I/OI/OServiziServizi

ecc.ecc.

IIS Anon.IIS Anon.

SystemSystem

ASP.NETASP.NET

ASPNETASPNET

IUSR_xxxIUSR_xxx

ASPNETASPNET

ThreadThread

ProcessProcess

Page 92: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

.ASPX.ASPX

<processModel <processModel userName=“SYSTEM”>userName=“SYSTEM”>

ClientClient

Sist.Sist.Oper.Oper.

I/OI/OServiziServizi

ecc.ecc.

IIS Anon.IIS Anon.

SystemSystem

ASP.NETASP.NET

ASPNETASPNET

IUSR_xxxIUSR_xxx

SYSTEMSYSTEM

ThreadThread

ProcessProcess

Page 93: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

.ASPX.ASPX

Anche se IIS blocca AnonimoAnche se IIS blocca Anonimo

ClientClient

Sist.Sist.Oper.Oper.

I/OI/OServiziServizi

ecc.ecc.

IIS Anon.IIS Anon.

SystemSystem

ASP.NETASP.NET

ASPNETASPNET

RobertoBRobertoB

SYSTEMSYSTEM

ThreadThread

ProcessProcess

Page 94: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ASP.NET ImpersonationASP.NET Impersonation

• Far passare il token di IIS sul thread di Far passare il token di IIS sul thread di ASPNET_WP.exeASPNET_WP.exe

• <configuration><configuration>• <system.web><system.web>

• <identity impersonate=“true” /><identity impersonate=“true” />• <system.web><system.web>

• </configuration></configuration>

Page 95: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

.ASPX.ASPX

ImpersonationImpersonation

ClientClient

Sist.Sist.Oper.Oper.

I/OI/OServiziServizi

ecc.ecc.

IIS Anon.IIS Anon.

SystemSystem

ASP.NETASP.NET

ASPNETASPNET

IUSR_xxxIUSR_xxx

IUSR_xxxIUSR_xxx

ThreadThread

ProcessProcess

Page 96: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

.ASPX.ASPX

se Blocco Anonimose Blocco Anonimo

ClientClient

Sist.Sist.Oper.Oper.

I/OI/OServiziServizi

ecc.ecc.

IIS Anon.IIS Anon.

SystemSystem

ASP.NETASP.NET

ASPNETASPNET

RobertoBRobertoB

RobertoBRobertoB

ThreadThread

ProcessProcess

Page 97: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

ImpersonationImpersonation

• Si può impersonare anche un utente Si può impersonare anche un utente applicativo per tutta l’applicazioneapplicativo per tutta l’applicazione

• <identity impersonate=“true”<identity impersonate=“true”userName=“UtenteAppl”userName=“UtenteAppl”password=“Pippo” />password=“Pippo” />

• Per usare un solo utente che Per usare un solo utente che rappresenta l’applicazione rappresenta l’applicazione semplificando la gestione della semplificando la gestione della sicurezza sulle risorsesicurezza sulle risorse

• Quello che si fa(ceva) per COM+Quello che si fa(ceva) per COM+

Page 98: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Authentication VS AuthorizationAuthentication 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 ASP.NET fornisce un’infrastruttura per entrambientrambi

• Iniziamo dalla primaIniziamo dalla prima

Page 99: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Metodi di AuthenticationMetodi 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

Page 100: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Windows AuthenticationWindows 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 Windows Identity Windows • WindowsIdentity.GetCurrent().NameWindowsIdentity.GetCurrent().Name

• Test di appartenenza a gruppiTest di appartenenza a gruppi• User.IsInRole(“Domain\Group”)User.IsInRole(“Domain\Group”)

Page 101: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Web.Config AuthorizationWeb.Config Authorization• Implementato da UrlAuthorizationModuleImplementato da UrlAuthorizationModule• Si applica a tutte le modalità di Si applica a tutte le modalità di

autenticazioneautenticazione• I permessi si impostanoI permessi si impostano

• Con Grant/DenyCon Grant/Deny• Per Utenti e RuoliPer Utenti e Ruoli

• In Windows Authentication gli utenti In Windows Authentication gli utenti devono corrispondere a quelli del SOdevono 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 IIS gira il codice 401 in una richiesta di

autenticazioneautenticazione

Page 102: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Web.Config AuthorizationWeb.Config Authorization

• <configuration><configuration>• <system.web><system.web>

• <authorization><authorization>• <deny users=“?” /><deny users=“?” />• <allow roles=“Miestaff\Segreteria” /><allow roles=“Miestaff\Segreteria” />• <deny users=“*” /><deny users=“*” />

• </authorization></authorization>• <system.web><system.web>

• </configuration></configuration>

Page 103: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Forms AuthenticationForms Authentication

• L’autenticazione Windows non può L’autenticazione Windows non può essere usata per siti pubbliciessere usata per siti pubblici• Task amministrativi enormiTask amministrativi enormi• Non passa dai firewallNon passa dai firewall• Conoscere il Principal Windows rende il Conoscere il Principal Windows rende il

nostro sistema più attaccabilenostro sistema più attaccabile

• ASP.NET fornisce un’infrastruttura per ASP.NET fornisce un’infrastruttura per evitare di svilupparsi tutto a manoevitare 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)

Page 104: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

SignoutSignout

• 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

Page 105: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

TipsTips

• 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 Su tutto il sito per evitare che il cookie di

login passi in chiarologin passi in chiaro• Occhio ai tag IMG e HREFOcchio ai tag IMG e HREF

• Negare l’accesso Http a tutte le parti protette Negare l’accesso Http a tutte le parti protette per essere sicuriper essere sicuri

Page 106: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Proviamo a riepilogareProviamo a riepilogare

• Windows AuthenticationWindows Authentication• Per le intranetPer le intranet• Impersonation TrueImpersonation True

• Per far passare il SecurityPrincipal di IIS a Per far passare il SecurityPrincipal di IIS a ASP.NETASP.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

Page 107: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Considerazioni finaliConsiderazioni finali• ASP.NET è una libreria di classi che ASP.NET è una libreria di classi che

consente lo sviluppo di applicazioni Web consente lo sviluppo di applicazioni Web dinamichedinamiche

• È possibile utilizzare tutte le librerie È possibile utilizzare tutte le librerie disponibili con il .NET Frameworkdisponibili con il .NET Framework

• Web Form e Web Controls permettono di Web Form e Web Controls permettono di trattare lo sviluppo Web in modo simile a trattare lo sviluppo Web in modo simile a quello Windowsquello Windows

• Insieme con le funzionalità di collegamento Insieme con le funzionalità di collegamento ai dati è possibile ridurre fortemente i ai dati è possibile ridurre fortemente i tempi di sviluppotempi di sviluppo

• Le prestazioni del codice compilato sono Le prestazioni del codice compilato sono molto superiori alle tecnologie interpretatemolto superiori alle tecnologie interpretate• ASP tradizionale, PHP, ecc.ASP tradizionale, PHP, ecc.

Page 108: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

Link utiliLink utili• MSDN Academic AllicanceMSDN Academic Allicance

• http://www.msdnaa.nethttp://www.msdnaa.net • MSDN StudentiMSDN Studenti

• http://www.microsoft.com/italy/msdn/studentihttp://www.microsoft.com/italy/msdn/studenti • MSDN OnlineMSDN Online

• http://msdn.microsoft.comhttp://msdn.microsoft.com• GotDotNETGotDotNET

• http://www.gotdotnet.comhttp://www.gotdotnet.com• ASP.NETASP.NET

• http://www.asp.nethttp://www.asp.net• Windows FormsWindows Forms

• http://www.windowsforms.nethttp://www.windowsforms.net• DevLeapDevLeap

• http://www.devleap.ithttp://www.devleap.it• UgiDotNetUgiDotNet

• httphttp://www.ugidotnet.org://www.ugidotnet.org

Page 109: Applicazioni Web con ASP.NET Silvano Coriani (scoriani@microsoft.com) Academic Developer Evangelist Developer & Platform Evangelism Microsoft Microsoft

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