Diapositiva 1
1
ADO.NET: Compendi Consigliati
msdn2.microsoft.com/it-it/library/default.aspx
www.ugidotnet.org
www.aspitalia.com
www.dotnet2themax.it
Autori:
Francesco Balena
Dino Esposito
Marco Bellinaso
David Sheppa
ASP.NET: introduzione
ASP.NET una tecnologia lato server per lo sviluppo di WebApplication basate sul Framework .NET di cui parte integrante.
HTML
ASP.NET
ASP
Active Server Page.Net
Introduzione
4
ASP.NET: Richiami, i Protocolli
TCP/IP
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
Client
Server
Richiesta HTTP
default.htm
IIS/Apache
Risposta HTTP
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 dallutente
Es. ripresentare le informazioni digitate
ASP.NET: richiami, HTTP
ASP.NET: richiami, Linguaggi di markup
Hypertext Markup Language (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
Ciao Ciao
Testo
Tag HTML:
Contenuti in un file di testo
Memorizzati su un Server
Richiesti via Http dal browser
Interpretati sul client
Client
Server
Richiesta HTTP
ASP
engine
default.asp
IIS
JScript
VB Script
Esecuzione
ADO
Recupero risultati
Risposta HTTP
http://www.dcc.com/equipment/catalog_type.asp? ProductType=rock+shoes
ASP.NET: richiami, Classi ASP
8
Invio dati al server:
Le informazioni vengono inviate a NomePagina sotto forma di stringhe
GET
txtNome=xxxx&txtCognome=yyyy
POST
Come header HTTP
Response Object, Consente di gestire la risposta Http
Request Object, Consente di gestire la richiesta Http
ASP.NET: richiami, Classi ASP
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 tecnologie HTML 4 / CSS
Apertura verso altre tecnologie XML / XSLT
ASP.NET: richiami, Classi ASP - Vantaggi
Solo codice script: Povert di linguaggi, Utilizzo limitato di librerie, Lentezza in esecuzione (relativa)
Sorgenti non protetti dallinfrastruttura
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
ASP.NET: richiami, Classi ASP - Vantaggi
Basato sul Framework.Net e Linguaggio potente (VB, C#)
Compilazione:
Automatica
E modifiche del codice sempre ammesse
Web Form e Controlli
Propriet, Metodi, Eventi
Le pagine sono classi
Debug e gestione errori completa
Web.config per settaggi applicativi
Web Service integrati
Separazione fra codice e HTML (Code Behind)
ASP.NET: levoluzione
Active Server Page.Net
Architettura
13
ASP.NET: dotNet Framework
OPERATING SYSTEM
Unmanaged Application
Common Language Runtime
Base Class Library
Managed Application
Common Language Runtime: interoperabilit, sicurezza, garbage collection,
versioning, .
Base Class Library: GUI, collection, threads, networking, reflection, XML,
ASP.NET: dotNet Framework
ASP.NET
Web Form: Web GUI (object oriented, event based, browser indipendent
Web Services: serivizi distribuiti su RPC (SOAP, HTTP)
OPERATING SYSTEM
Unmanaged Application
Common Language Runtime
Base Class Library
Managed Application
Web Application
Web Form Web Services
ASP.NET
Common Language Runtime
Web Server (IIS)
ASP.NET: Web Application
ASP.NET definisce una Web Application come:
la somma di tutti i file, pagine, handler, moduli e eseguibili che possono essere invocati o eseguiti nellambito di una directory virtuale su di un web applicationserver
Applicazioni Distribuite
Internet
presentation
middle tier
data tier
Web Services
Db
Web Form
(sample.aspx)
ASP.NET: tutto comincia con una richiesta...
La richiesta per simple.aspx arriva al Web Server:
IIS accetta ed autentica la richiesta;
IIS individua il modulo ISAPI che gestisce la risorsa;
Il modulo riceve lincartamento relativo alla richiesta, ovvero i dettagli;
Richieste per le risorse ASP.NET passano al modulo ISAPI aspnet_isapi.dll
Sul modulo sono mappate varie estensioni tipiche di applicazioni ASP.NET: aspx, asmx, ashx, axd
Altre estensioni (asax, ascx, config) sono bloccate.
ASP.NET: la nostra prima applicazione ASP.NET
Cominciamo subito a creare la nostra prima applicazione.
Useremo ovviamente Visual Studio in versione (2005 o 2008).
Tenete presente che in teoria possibile realizzare unapplicazione ASP.NET anche con il classico notepad.
Il primo passo quello di creare una nuovo Web Site, scegliendo la relativa opzione da Visual Studio, scegliere il linguaggio preferito (che pu differire di pagina in pagina) ed impostare il tipo di hosting:
File System
Http
Ftp
ASP.NET: la nostra prima applicazione ASP.NET
Creato la Web Application la ritroveremo nel Solution Explorer con una struttura similare alle seguente:
gi da questo semplice progetto vediamo alcuni elementi caratterizzanti:
Special Folder (in questo caso APP_DATA) sono cartelle speciali gestite la fremwork;
Web.config il file di configurazione principale dellapplicazione
WebForm and Code-behind page, ovvero le pagine di design e le pagine con il codice
ASP.NET: Configurazione (1)
Lintero funzionamento di una Web Application Asp.net configurabile attraverso uno o pi file web.config:
scritto in XML, editabile con qualsiasi editor di testo;
il file mantenuto nello stesso direttorio dellapplicazione;
i cambiamenti sono individuati automaticamente senza bisogno di riavvio.
La configurazione avviene attraverso una struttura gerarchica: praticamente possibile specificare una particolare configurazione per gli elementi contenuti in ogni directory.
esempio di web.config
ASP.NET: Configurazione (2)
Root (web.config)
machine.config
Sub Dir (web.config)
Ogni web application eredita la configurazione di base contenuta nel file machine.confing contenuta nel path di installazione del framework stesso
(%windir%\Microsoft.NET\Framework\Version).
Il file machine.config contiene:
un insieme standard di handler di sezioni di configurazione(configuration section);
gestione del browser capabilities, messaggi di errore, ecc.
ASP.NET: la nostra prima applicazione ASP.NET
Se proviamo ad aprire la pagina Default2.aspx (in source mode) vedremo qualcosa di simile:
Untitled Page
Dov finito il codice
ASP.NET: la nostra prima applicazione ASP.NET
Il Codice in una Web Application ASP.NET pu essere:
code inline: i frammenti di codice del linguaggio di
programmazione scelto sono iniettati nel template HTML
della pagina unitamente ai nuovi tag (stile Classic ASP, PHP);
code behind: codice e template HTML, arricchito con nuovi tag, risiedono in file distinti.
Ovviamente preferibile utilizzare il modello code behind che permette una netta separzione tra layout e codice applicativo consentendo anche la separazione dei compiti nel team di sviluppo (designer e sviluppatori). Nonostante ci con la versione 2 di ASP.NET, Microsoft ha introdotto la possibilit di utilizzare il code inline che risulta utili in contesti in cui necessario realizzare velocemente pagini poco complesse.
Le classi di code behind hanno lo stesso nome della pagina con aggiunta dellestensione relativa al linguaggio (es: default.aspx.cs, default.aspx.vb) .
.cs
.aspx
ASP.NET: Layout delle directory di una web application
(DLL)
(File .cs, .vb, ecc)
Code Inline
Code Behind
24
Root Directory
Bin
file .aspx
Root Directory
Bin
file .aspx (solo template)
Src
ASP.NET: esempio di pagina con code inline
ASP.NET Page -CodeInline
void VisualizzaTesto(object sender,EventArgse) {
Testo.Text=CasellaTesto.Text.Trim().Length==0 ?"Non hai inserito alcun carattere." :"I caratteri che hai inserito sono: "+CasellaTesto.Text;}
voidPage_Load(object source,EventArgse) {
Etichetta.Text="Inserisci dei caratteri:";
InviaTesto.Text="Invia >>";
}
ASP.NET: esempio di pagina con code behind (1)
>";
}
}
ASPX.CS page
Il Code Behind non unappendice della pagina ma la classe da cui viene ereditata la pagina
ASP.NET: ereditariet
System.Web.UI.Page
Public Class CodiceInherits S.W.U.Page
@Page Inherits=Codice
.dll
.VB
.aspx
public Event EventHandler Load
public bool IsPostBack {get;}
public HttpRequest {get;}
public HttpResponse {get;}
Public txtName as S.W.U.TextBox
Sub Page_Load(x,y)
Response.Write x
End Sub
La classe contiene le interfacce della classe base + txtName
La pagina eredita la Classe CodiceQuindi le nuove propriet, eventie metodi rispetto a Page
ASP.NET: sintassi (1)
Direttive:
Blocchi di codice dichiarativo:
[ lines of code ]
Blocchi di codice:
ControlliHTML:
ASP.NET: sintassi controlli server (web control) (2)
Controlli dati server:
Propriet lato server:
Subpropery:
Controllo gestione lato server eventi:
Identificatori di oggetti server-side
Include server-side
Commentiserver-side
ASP.NET: elementi di una pagina
Ogni pagina ASP.NET ha tipicamente le seguenti sezioni:
Page directives (@Page, @Register, @Assembly, @Import): impostazione dellambiente, registrazione controlli, caricamento assembly non ancora nella GAC, registrazione namespace, indicazione del linguaggio utilizzato;
Code section: gestori dei controlli server side della pagina; pu essere inline o separato
Script lato client, ad esempio javascritp;
Page layout: lo scheletro della pagina
Controlli (runat=server)
Controlli HTML, stessa API dei tag HTML;
Controlli Web, stessa funzionalit, API astratta;
Literals (puro testo);
Espressioni (, data binding).
ASP.NET: elementi di una pagina (2)
Vediamo un esempio di uso delle direttive
---codice---
Referenzia lAssemblyGestioneCorsi.dll
Codice VB (uno solo per pagina)
Dichiarazione variabili obbligatoria (abilitare sempre)
Queste direttive corrispondono a
Vbc.exe /optionexplicit+ /r:GestioneCorsi.dll ElencoCorsi_aspx
ASP.NET: tanti tipi di file ma tutto testo
ASP.NET prevede una serie di estensioni per identificare file con funzionalit diverse:
.aspx: file asp.net standar;
.ascx: file di controlli custom;
.asmx: web services;
.cs, vb: file di codice code-behind;
machine.config: file di configurazione del framework:
web.config: file di configurazione;
global.aspx:
Tutti questi file sono semplici file di testo, editabili con il notepad!
ASP.NET: vediamo un esempio pi concreto (1)
Sub SubmitBtn_Click(SenderAs Object, E As EventArgs)
Message.Text = Hi & Name.TextEnd Sub
Name:
in questo caso, vista la semplicit, usiamo codice inline
ASP.NET: vediamo un esempio pi concreto (2)
ASP.NET: il modello di esecuzione
IIS
ASP.NET RUNTIME
Parse .aspx file
Generate page class
Instantiate controls
Client
Server
Response
36
ASP.NET: processo di compilazione (1)
ASPX
File
Request (1)
ASPX
Engine
Parsing (2)
ClassFilesuDisco
Generazione (3)
Page
Class
Istanza, Esecuzione e Rendering (4)
Response (5)
Request (1b)
CreazioneIstanza (2b)
Response (3b)
Code-behindfile
37
ASP.NET: processo di compilazione (2)
Supporto per la compilazione del sorgente just-in-time e tutti gli elementi relativi vengono compilati in un assembly (single o multiple file)
Auto compilazione per .aspx .ascx .asmx .ashx
Lassembly 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)
ASSEMBLY 1
MyApp.dll
Pic1.jpg
metadata
ASSEMBLY 2
MyApp.dll
metadata
Shared name
come di consueto per la piattaforma dotNet (e non solo) ogni assembly contiene un file manifest che descrive: lista dei file dellassembly, informazioni sui tipi, nomi,
38
ASP.NET: gestione della richiesta dal Server (1)
INETINFO.exe
ISAPI Extension Manager
ASPNET_WP.EXEWorker Process
HTTP Request.ASPX
.ASMX
.ASHX
.DISCO
.SOAP
ASP.DLL
ASP.NET Pipeline
INETINFO.exe
ISAPI Extension Manager
ASPNET_ISAPI.DLL
ASP.NET non usa ISAPI/ASP
ISAPI extension redirige le richieste sul worker process
NamedPipe
39
ASP.NET: gestione della richiesta dal Server (2)
WWW Service
Config Mgr
Process Mgr
HTTP.sys
Web Garden
W3WP.exe
ISAPI
Extensions
(ASP, etc.)
ISAPI Filters
Application Pool 2
W3WP.exe
ASP.NET ISAPI
CLR Application Domain
CLR Application Domain
W3WP.exe
ASP.NET ISAPI
CLR Application Domain
CLR Application Domain
Application Pool 1
metabase
INETINFO
Architettura interna di IIS 6
40
Le richieste sono processate nella pipeline allinterno del Worker Thread
La pipeline contiene classi HttpRuntime
I Moduli sono interceptor opzionali
HttpContext la classe accessibile nella pipeline
ASPNET_WP.EXE
HttpRuntimeClass
Modulo 1
Modulo 2
HTTP HandlerPagina1.aspx
HttpRuntimeClass
Modulo 1
Modulo 2
HTTP HandlerPagina2.aspx
ASP.NET worker thread 1
ASP.NET worker thread 2
ASP.NET: gestione della richiesta dal Server (3)
Propriet della classe HTTPContex
ASP.NET: gestione della richiesta dal Server (4)
TipoNome IdentificatoreDescrizioneHttpContextCurrentContesto correnteHttpRequestRequestRichiesta HttpHttpResponseResponseRisposta HttpHttpServerUtilityServerURL CrackingHttpSessionStateSessionSessione per clientHttpApplicationStateApplicationProperty Bag applicativaHttpApplicationApplicationInstanceContesto ApplicativoIHttpHandlerHandlerHandler della chiamataIDictionaryItemsProperty Bag per richiestaExceptionErrorPrimo errore incontratoIPrincipalUserSecurity ID del chiamanteASP.NET: ciclo di vita di una pagina (intro)
Una pagina aspx ha un proprio ciclo di vita (stati in cui si trova la pagina durante lesecuzione) a cui corrispondono una serie di eventi gestibili per personalizzarne il funzionamento:
PreInit (si verifica prima dellinizialiazzazione): serve per
usare la propriet IsPostBack
creare controlli dinamici
applicare temi e pagine master dinamicamente
leggere e scrivere profili utente
Init (la pagina inizializzata): leggere e inizializzare le propriet dei controlli
Load: leggere e aggiornare le propriet dei controlli
PreRender: apportare modifiche ai contenuti della pagina
UnLoad (la pagina scaricata dalla memoria): operazioni di chiusura finale
43
ASP.NET: eventi, server round trip (1)
Gli eventi si verificano
sul browser (lato client)
ma vengono
gestiti lato server
con linvio di messaggi
Server
Web Client
Parse Message
Event
Event Handler
response
chiama un appropriato event handler
event
message
Page_Load
Page_Unload
Textbox1_Changed
Button1_Click
Control Events
1. Change Events
2. Action Events
44
ASP.NET: gli eventi, server round trip (2)
Con i controlli messi a disposizione da ASP.NET si possono costruire interfacce web che si comportano in modo simile alle interfacce utente delle comuni applicazioni stand-alone.
Ogni interazione con il browser (e.g., pressione di un pulsante, selezione di una voce da un menu a tendina) corrisponde ad un evento gestibile sul server .server
Linterazione avviene tramite un round-trip, i.e., una richiesta POST inviata al server. Questultimo, dopo aver elaborato
45
ASP.NET: Debugging: lato Server e lato Client, Tracing
Il Debugging la Server viene abilitato nel file di configurazione web.confg inserendo la seguente istruzione:
Il Debugging lato client pi complicato da impostare:
Abilitare il browser
Quindi o si fa partire il debugger da IE e poi si mette il breakpoint sul javascript;
o da Visual Studio ci si attacca al processo IE (funzionalit non supportata nella versione Express);
Un metodo molto efficace, infine, lutilizzo dellistruzione debugger; nel codice Javascrip. Attenzione per a non lasciarla in produzione!
Il Tracing si pu abilitare a livello di Applicazion (web.config) e di Pagina.
Attraverso la propriet pageOutput si abilita loutput sulla pagina o richiamando trace.axd
46
Active Server Page.Net
HTML & WEB Controls
ASP.NET: Controlli lato Server
I controlli lato server sono molteplici e normalmente vengono
raggruppati logicamente in famiglie.
I controlli sono contenuti nel namespace: System.Web.UI.Control e
di due tipi:
HTML Control (namespace System.web.ui.control.HTMLControl)
Si mappanodirettamente in elementiHTML
Attributi HTML
Esempi: HtmlAnchor(), HtmlTable()
Web Controls (namespace System.web.ui.control.WebControl)
Controlli astratti: non c mapping uno a uno con i controlli
HTML server
Modello oggetti tipizzati
Identificazione automatica del browser
Esempio: TextBox()
ASP.NET: controlli lato Server, HtmlControl
ASP.NET: controlli lato Server, WebControl
ASP.NET: HTML Control vs. Web Control
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
txtName.SetAttribute("bgcolor", "red")
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
ASP.NET: lo stato dei controlli server
In precedenza facendo un richiamo sui protocolli abbiamo sottolineato come il protocollo HTTP sia stateless ovvero senza stato.
Come fa allora unapplicazione asp.net a mantenere traccia dello stato dei suoi controlli server?
Ebbene il sistema si chiama VIEWSTATE, per ricostruire in modo trasparente il contesto della richiesta, .NET mette a disposizione loggetto System.Web.UI.StateBag, che permette di codificare in un campo nascosto (__VIEWSTATE) lo stato corrente della pagina. Esempio:
ASP.NET Page -Code Behind
Recommended