BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

203
BENVENUTI

Transcript of BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

Page 1: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

BENVENUTI

Page 2: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

2

10.00 Inizio

12.30 Lunch

14.00 Ripresa lavori

15.15 Coffee Break

18.45 Termine

Page 3: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

Cenni di licensing

Page 4: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

4

• Individuale: 1 sviluppatore, 1 licenza (eccetto per MSDN Library)

• Indivisibile nei suoi componenti• Installazioni illimitate ma accesso singolo • Prodotti per Test & sviluppo, non utilizzabili in

produzione.

– Eccezioni:

• Office in MSDN Universal

• Downgrade– Si, ma senza utilizzo contemporaneo.

• MSDN è la soluzione!

• Perpetua (anche all’interno dei contratti di licensing)

Page 5: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

5

Per tutti gli strumenti di sviluppo la Software Assurance è MSDN

Page 6: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

6

Special Edition Windows Server™ 2003 Standard Edition *

SQL Server™ 2000 Developer Edition* Add-on Visual Studio Tools per Office MS Learning E-books and Certification Exam Vouchers Tre corsi multimediali di programmazione Microsoft .NET Framework (su ASP.NET, VB.NET e C++)

Descrizione Versione SKU Prezzo*

Visual Studio .NET Professional 2003 Special Edition

Standard 659-01570 € 992

Visual Studio .NET Professional 2003 Special Edition

Upgrade* 659-01579 € 676

•Diminuito il prezzo della versione full da 1.347€ a 992€•Nuova opzione di aggiornamento: versione Upgrade per i possessoridei tool standard della famiglia VS.NET 2002 e 2003.

Page 7: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

7

Diverse versioni: Library, Operating System, Professional, Enterprise, UniversalDocumentazione Tecnica Beta e Service Pack Ultime versioni dei prodotti Diritto di accesso al sito MSDN Subscribers Download Interventi di supporto tecnico telefonico gratuiti:

MSDN Operating SystemsMSDN Operating Systems 2 incidents2 incidentsMSDN ProfessionalMSDN Professional 2 incidents2 incidentsMSDN EnterpriseMSDN Enterprise 3 incidents3 incidentsMSDN UniversalMSDN Universal 4 incidents4 incidents

Ricordarsi di attivare la licenza via Web dal sito MSDN!

Page 8: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

8

•KIT MSDN Universal…e diventi MCP! 5.143 € 3.182 €

MSDN Universal3.353€ 3.182€

•Corso MOC 2310•Voucher esame 1.550€•Libro MOC

Programming Microsoft ASP.NET

•KIT MSDN Professional 1.511 € 1.332 €

MSDN Professional1.481€ 1.332€

Introducing Microsoft ASP.NET 2.0

Page 9: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

9

• Hai una licenza Visual Studio .NET? E’ il momento di passare a MSDN: paghi solo la Software Assurance!

Page 10: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

10

www.microsoft.com/italy/msdn/

• Per tutte le informazioni sui nostri eventi e webcast visitate

registratevi direttamente alla Newsletter MSDN Flash.

Page 11: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

MCSD MCAD MCSE+I MCSA MCTMCSD MCAD MCSE+I MCSA MCT

Page 12: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

12

• Faccio parte di www.DevLeap.com• Gruppo di consulenti che

– Erogano corsi e conferenze– Scrivono libri

• Alcuni saranno in omaggio oggi– Scrivono software– Fanno consulenza progettuale e implementativa

• Sito pubblico – Articoli tecnici – Cap 1 ASP.NET Full Contact disponibile al download– Blog per seguire la tecnologia

Page 13: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

13

• ASP.NET è una tecnologia nuova per fare cose vecchie

• ASP.NET è parte del framework .NET– Ambiente object oriented– Nuovi linguaggi…oggi usiamo C#...non preoccupatevi– Nuovo modo di scrivere le cose– ADO.NET per l’accesso ai dati

• ASP.NET in quanto tale– Cambia il modo di scrivere pagine web– Cambia il modo di pensare le pagine web

• Oggi trattiamo ASP.NET– Non dimenticatevi che il framework .NET esiste !– Il buon programmatore ASP.NET conosce il framework

Page 14: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

ClientClient ServerServer

Richiesta HTTPRichiesta HTTP

default.htmdefault.htm

IIS/ApacheIIS/Apache

Risposta HTTPRisposta HTTP

Page 15: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

15

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 16: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

ClientClient ServerServer

Richiesta HTTPRichiesta HTTP

Active Server PagesActive Server Pagesengineengine

default.aspxdefault.aspx

IISIIS

JScriptJScriptVB / C#VB / C#EsecuzioneEsecuzione

ADO.NETADO.NET

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

Page 17: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

17

• Time• For i = 1 to X

– Response

• Next

Page 18: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

18

• <FORM action=“NomeRisorsa”><INPUT TYPE=“Text” NAME=“txtNome”><INPUT TYPE=“Text” NAME=“txtCognome”><INPUT TYPE=“Submit”>

• </FORM>• Le informazioni vengono inviate a “NomeRisorsa”

sotto forma di stringhe– txtNome=xxxx&txtCognome=yyyy

• Nel QueryString

Page 19: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

19

• Contiene le info del QueryString

<% first=Request.QueryString("txtfname")%> <% first=Request.QueryString("txtfname")%>

<% first=Request.QueryString(“txtfname”) last =Request.QueryString(“txtlname”) Response.Write(“Welcome” & first & last)%>

<% first=Request.QueryString(“txtfname”) last =Request.QueryString(“txtlname”) Response.Write(“Welcome” & first & last)%>

Page 20: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

20

• <FORM action=“NomeRisorsa” METHOD=“POST”><INPUT TYPE=“Text” NAME=“txtNome”><INPUT TYPE=“Text” NAME=“txtCognome”><INPUT TYPE=“Submit”>

• </FORM>• Le informazioni vengono inviate a “NomeRisorsa”

sotto forma di stringhe– txtNome=xxxx&txtCognome=yyyy

• Nel form (non si vedono nel Querystring)

Page 21: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

21

• Contiene le info del Form

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

<% first=Request.Form(“txtNome”) last =Request.Form(“txtCognome”) Response.Write(“Ciao” & first & last)%>

<% first=Request.Form(“txtNome”) last =Request.Form(“txtCognome”) Response.Write(“Ciao” & first & last)%>

Page 22: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

22

• Ogni richiesta è a se stante• Non esistono informazioni di stato in Http• Per ogni richiesta dobbiamo preoccuparci di

inviare il contenuto• Ad esempio riempire i campi di un form con le

informazioni digitate dall’utente

Page 23: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

23

• Ripresentare le informazioni digitate• <INPUT • TYPE=“TEXT” • NAME=“txtNome” VALUE=<

%=Request.QueryString(“txtNome”)%>• >

Page 24: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

24

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

runat=“server”><INPUT TYPE=“Text” ID=“txtCognome”

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

• </FORM>

• I controlli mantengono lo stato

Page 25: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

25

• Recupero valori digitati in automatico

• Poi aggiungiamo il codice per contare

Page 26: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

26

• Oggetti programmabili• Attributo runat=“server”• Mantengono lo stato delle info• Generano HTML per il client• Espongono

– Proprietà– Metodi

• Scatenano eventi

Page 27: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

27

• <input type=“text” value=“default” runat=“server” id=“txtName” >

• Mappano i tag HTML 1:1• Lavorano bene con gli Editor attuali• Ma il modello ad oggetti non è strongly-typed

– Ad esempio• txtName.Value = “Roberto”• txtName.SetAttribute("bgcolor", "red")

Page 28: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

28

• <input • type=“Submit” • value=“Premi”

runat=“server”• onServerClick=“EseguiOperazioni”>

– onClick verrebbe inviato al client– In generale ogni attributo non utilizzato server-side o

sconosciuto viene inviato al client

Page 29: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

29

• Definizione evento• Gestione evento

• Notare– Occhio ai Convert

• .NET è tipizzato• Il Web è “stringato”

– Occhio alla Response• Esecuzione non sequenziale• Vedere il Source• Usare ad esempio <div runat=server>

Page 30: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

30

• I controlli server mantengono le proprietà impostate fra round-trip

• Tramite un campo hidden– __VIEWSTATE

• Pro– Meno plumbing– Meno roundtrip verso i dati

• Contro– __VIEWSTATE occupa banda– E’ disabilitabile

Page 31: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

31

• ViewState– View Source

• Modifica attributo al click– Azzera: Cambia colore pulsante

• Disable su Controllo– Non tiene il bgcolor

• Disable su Pagina– Non tiene il bgcolor

• Comunque txtConta ha sepre il valore– Perchè ?

Page 32: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

32

• HTML Control– Sintassi HTML– Mappati 1:1 con controlli HTML– Namespace System.Web.UI.HtmlControls

• Web Controls– Sintassi diversa– Tutti gli HTML Control

• Più controlli avanzati– Maggiori funzionalità

Page 33: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

33

• <asp:TextBox runat=“server” id=“txtName” Text=“default”></asp:TextBox>

• Modello ad oggetti consistente e strongly-typed – txtName.Text = “Roberto”– txtName.BackColor = Color.Red

• Rendering differente per browser– Esempio: Label

• Funzionalità differenti per browser– Esempio: Validation Control

Page 34: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

34

Page 35: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

35

• <asp:TextBox ...– Strongly-typed– BackColor=“red”

• <asp:ListBox ...– Mantenere lo stato significa anche riposizionare la

combo-box– Si possono aggiungere elementi

– Reflector (listbox.rendercontents)

Page 36: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

36

• Per chi arriva da ASP 3.0, PHP o altri ambienti di scripting server-side

• Più vicino a VB 6.0• Label per i testi “fissi”• TextBox e compagni per l’input

Page 37: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

37

• List Control – Iterativi su una base di dati

• DropDownList, ListBox, RadioButtonList, CheckBoxList• Repeater, DataList, DataGrid

• Validation Control– Ci arriviamo fra poco…

• Controlli complessi (Rich Control)– Calendar, AdRotator, Xml

• Mobile Control: per device e telefonini• Internet Explorer Control

Page 38: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

38

• Anche la pagina è un oggetto• La classe deriva da System.Web.UI.Page• Si possono costruire variabili membro• HTML diventa parte del metodo Render• Il codice di rendering diventa parte del metodo

Render• WebForm e Controlli Server-side sono costruiti

sulla classe Page

Page 39: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

ASPXASPXFileFile

RequestRequest

ASPXASPX

EngineEngine

ParsingParsing

ClassFilesu

Disco

GenerazioneGenerazione

PagePage

ClassClass Istanza, Istanza, Esecuzione Esecuzione e Renderinge Rendering

ResponseResponse

RequestRequestCreazioneCreazione

IstanzaIstanza

ResponseResponse

Code-Code-behindbehind

filefile

Page 40: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

40

• A livello di pagina• @Page controlla la compilazione

– Molti attributi

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

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

Page 41: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

41

ElencoCorsi.aspxElencoCorsi.aspx

<%@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 42: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

42

Language Linguaggio utilizzato

Buffer Response Buffering True/False

ContentType Header Content Type MIME

EnableSessionState Session True/False

EnableViewState ViewState True/False

Src File sorgente per code-behind

Inherits Base Class diverse da Page

ErrorPage URL per eccezioni non gestite

Explicit Option Explicit True/False

Strict Option Strict True/False

Debug Compilazione con simboli True/False

Trace Tracing True/False

CompilerOptions Switch per VBC.exe o CSC.exe

Page 43: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

43

• Page Events– Page_Init– Page_Load– Page_Unload– La routine di evento riceve gli argomenti .NET

Page 44: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

44

• Evento Load• Riempire una ListBox

• Occhio al POST– Aggiunge sempre elementi– Perchè la listbox mantiene il suo stato

Page 45: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

45

• If Request.ServerVariables(“HTTP_METHOD”) diventa

• If Page.IsPostBack– Proprietà della classe Page– True se POST– False se GET

Page 46: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

46

• Evento Load• Riempire una ListBox solo in Get

• I controlli mantengono lo stato

Page 47: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

47

• ASP.NET gestisce client-side validazioni e server-side

• Client-side Validation – Dependent on browser version– FeedBack immediato– Riduce i round-trip

• Server-side Validation– Riesegue le validazioni– Controllo su fonte dati

Valido?

Valido?

UserInserimento

No

No

Si

Si

Msg Errore

Client

Server

Web ApplicationProcessing

Page 48: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

48

• Controllo Obbligatorietà Campo• Gestione errore client-side

– Non necessita di post– Risparmia round-trip

• Gestione errore server-side– Il controllo viene rieffettuato– Evita problemi

• Con browser che non supportano Javascript• Con i malintenzionati

• Non ferma l’esecuzione Server-side...giustamente– Demo 17 Page.IsValid

Page 49: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

49

• Con i Server Control (<asp:) automatico in base alle capacità del browser

• ClientTarget="DownLevel“• ClientTarget=“UpLevel“

– I controlli diventano span• sytle=“color:red ; visibility:hidden”

– Usa Javascript sul client

Page 50: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

50

• Uno solo per pagina• @Page

CodeBehind=“Codice.vb/cs” Inherits=“Classe”

• Nel file Codice.vb/cs– Definire Classe protected

• Derivare da System.Web.UI.Page• Poi il codice da usare con la pagina• Eventi• Funzioni

Page 51: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

51

• Visual Studio .NET• File con estensione VB / CS• Definisce una classe

– Nomepagina– Deriva da System.Web.UI.Page– Implementa le funzionalità custom

• Stiamo specializzando una classe !!!

Page 52: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

52

• Ci svela molti segreti• Espone

– Proprietà• Request / Response

– Metodi• DataBind• OnInit• OnLoad

– Eventi• Init / Load / UnLoad

– ...

Page 53: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

53

• Deriva da System.Web.UI.TemplateControl– A sua volta deriva da System.Web.UI.Control

• La pagina è un controllo !!!– E’ il controllo che espone tali caratteristiche

• Tutto il rendering è effettuato dal metodo Render– Non sequenzialità

• Come abbiamo visto prima– Ogni controllo specializza il Render

Page 54: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

54

• Implementato da Control• Si incarica di eseguire il rendering del contenuto

del controllo• Dichiarato come virtual• Possiamo specializzarlo

– protected void Render(...)– Volendo richiamando base.Render(...)

Page 55: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

55

• Separare il layout dal codice• Uno solo per pagina• @Page

CodeBehind=“Codice.vb/cs” Inherits=“Classe”

Page 56: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

56

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

Page 57: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

57

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 58: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

58

• Insieme di pagine aspx (e codebehind)• Rappresentata da una directory

– E sottodirectory

• Configurazione ad-hoc• Condivisione aree di memoria• Eventi a livello applicativo

– Start– End– BeginRequest– EndRequest

Page 59: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

59

• Application_Start– Creo counter nel performance monitor– DevLeap / Richieste Totali

• Application_BeginRequest– Sommo 1 al contatore

Page 60: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

60

• Application_Start– solo se è la prima richiesta per questa applicazione

• BeginRequest• AuthenticateRequest• AuthorizeRequest• ResolveRequestCache• Inizializzazione del gestore della risorsa

– ad esempio la pagina aspx• Session_Start

– solo se le Session sono abilitate ed è la prima richiesta del browser per quest’applicazione

• AcquireRequestState• PreRequestHandlerExecute• Esecuzione della pagina• PostRequestHandlerExecute• ReleaseRequestState• UpdateRequestCache• EndRequest

Page 61: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

61

• File di configurazione• In formato XML

– Occhio !!! È case sensitive• Per impostare parametri applicativi

– Opzioni di compilazione– Sicurezza– Gestione delle sessioni– Moduli HTTP (HttpModule) custom– Handler HTTP

• Sovrascrive le impostazioni di default– %WinDir%\Microsoft.NET\Framework\<versione>\CONFIG\

Machine.Config

Page 62: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

62

• Può contenere costanti applicative– Connection String– Indirizzo Email WebMaster

• <appSettings>• <add key=“EMail” value=“[email protected]” />

– </appSettings>

• Nel codice– strConn = Configuration.AppSettings(“EMail”)

Page 63: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

63

• “Semplice”

• <configuration> • <system.web>• <customErrors mode=“remoteonly”

defaultRedirect=“error.htm”/>• </system.web>• </configuration>

Page 64: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

64

• “Avanzato”

• <configuration> • <system.web>• <customErrors mode=“On” defaultRedirect=“error.htm”>• <error statusCode=“404”

redirect=“NotFound.htm”/>• <error statusCode=“401”

redirect=“NoAccess.htm”/>• </customErrors>• </system.web>• </configuration>

Page 65: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

65

• Scatta per tutte le eccezioni non gestite– Accesso alla Request corrente– Accesso all’oggetto Exception– Prendere provvedimenti

• Pagina di errore generica

• Oppure– Scrivere nell’EventLog

• Semplicissimo con la classe EventLog– Mandare una mail

• Semplicissimo con la classe SmtpMail

Page 66: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.
Page 67: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

67

INETINFO.exeINETINFO.exe

ISAPI ISAPI Extension Extension ManagerManager

ASP.NETASP.NETWorker 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/ASP per ASP.NET non usa ISAPI/ASP per eseguire il codiceeseguire il codice

• ISAPI Extension ASPNET_ISAPI.DLL ISAPI Extension ASPNET_ISAPI.DLL redirige le richieste sul worker redirige le richieste sul worker process di ASP.NETprocess di ASP.NET

Page 68: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

68

ASPNET_WP.EXEASPNET_WP.EXE

HttpRuntimeHttpRuntimeClassClass Modulo 1Modulo 1 Modulo 2Modulo 2 PageHandlerPageHandler

Pagina1.aspxPagina1.aspx

HttpRuntimeHttpRuntimeClassClass Modulo 1Modulo 1 Modulo 2Modulo 2 PageHandlerPageHandler

Pagina2.aspxPagina2.aspx

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

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

Page 69: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

69

ASPNET_WP.EXEASPNET_WP.EXE

HttpRuntimeHttpRuntimeClassClass AuthentAuthent AuthorizAuthoriz PageHandlerPageHandler

Pagina1.aspxPagina1.aspx

HttpRuntimeHttpRuntimeClassClass AuthentAuthent PageHandlerPageHandler

Pagina2.aspxPagina2.aspx

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

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

Page 70: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

70

• <httpModules>• <add name="OutputCache"

type="System.Web.Caching.OutputCacheModule"/>• <add name="Session"

type="System.Web.SessionState.SessionStateModule"/>• <add name="WindowsAuthentication"

type="System.Web.Security.WindowsAuthenticationModule"/>• <add name="FormsAuthentication"

type="System.Web.Security.FormsAuthenticationModule"/>• <add name="PassportAuthentication"

type="System.Web.Security.PassportAuthenticationModule"/>• <add name="UrlAuthorization"

type="System.Web.Security.UrlAuthorizationModule"/>• <add name="FileAuthorization"

type="System.Web.Security.FileAuthorizationModule"/>

• </httpModules>

Page 71: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

71

• Gestore della risorsa• Ogni estensione viene legata ad un HttpHandler• Come in Windows: ogni estensione è legata ad un

programma• Esistono diversi HttpHandler di default

Page 72: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

72

• <httpHandlers>• <add verb="*" path="trace.axd"

type="System.Web.Handlers.TraceHandler"/>• <add verb="*" path="*.aspx" • type="System.Web.UI.PageHandlerFactory"/>• <add verb="*" path="*.ashx" • type="System.Web.UI.SimpleHandlerFactory"/>• <add verb="*" path="*.asmx"

type="System.Web.Services.Protocols.WebServiceHandlerFactory, System.Web.Services, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>

• <add verb="*" path="*.rem" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>

• <add verb="*" path="*.soap" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>

Page 73: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

73

• <add verb="*" path="*.asax" type="System.Web.HttpForbiddenHandler"/>• <add verb="*" path="*.ascx" type="System.Web.HttpForbiddenHandler"/>• <add verb="*" path="*.config" type="System.Web.HttpForbiddenHandler"/>• <add verb="*" path="*.cs" type="System.Web.HttpForbiddenHandler"/>• <add verb="*" path="*.csproj" type="System.Web.HttpForbiddenHandler"/>• <add verb="*" path="*.vb" type="System.Web.HttpForbiddenHandler"/>• <add verb="*" path="*.vbproj" type="System.Web.HttpForbiddenHandler"/>• <add verb="*" path="*.webinfo"

type="System.Web.HttpForbiddenHandler"/>• <add verb="*" path="*.asp" type="System.Web.HttpForbiddenHandler"/>• <add verb="*" path="*.licx" type="System.Web.HttpForbiddenHandler"/>• <add verb="*" path="*.resx" type="System.Web.HttpForbiddenHandler"/>• <add verb="*" path="*.resources"

type="System.Web.HttpForbiddenHandler"/>• <add verb="GET,HEAD" path="*" type="System.Web.StaticFileHandler"/>• <add verb="*" path="*"

type="System.Web.HttpMethodNotAllowedHandler"/>• </httpHandlers>

Page 74: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.
Page 75: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

75

• Il Web è stateless• Mantenere lo stato delle informazioni

– Valori– Variabili– Proprietà

• Server-Side per riutilizzarli fra richieste diverse• Sulla stessa pagina• Sull’intera applicazione

Page 76: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

76

• Server Side– Web.Config– Application – Session (se cookie andrebbe dopo)– Caching

• Client/Server Side– Cookie – Hidden Field– QueryString– ViewState

Page 77: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

77

• Classe HttpApplicationState• Oggetto Application• Esposto come proprietà di

– HttpContext e Page

• Memoria condivisa per tutta l’applicazione– Indipendente dall’utente– Accesso tramite Nome/Valore– Non usarla per dati temporanei

• Difficile impostare una scadenza

• Da non confondere con la classe HttpApplication esposta come ApplicationInstance che rappresenta l’intera applicazione ASP.NET e non un’area di memoria

Page 78: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

78

• In ASP 1/2/3 le session – Necessitano del supporto dei cookie sul client– Sono single-machine e non adatte a configurazioni in

load-balancing– Consumano molta RAM

• In ASP.NET le session– Possono lavorare come prima oppure– Non necessitare dei cookie– Essere multi-machine– Appoggiarsi su DB o su uno State Server

Page 79: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

79

• Classe HttpSessionState• Oggetto Session• Esposto come proprietà di

– HttpContext e Page

• Memoria condivisa per tutta l’applicazione– Dipendente dall’utente– Accesso tramite Nome/Valore– Non usarla per dati temporanei

• Difficile impostare una scadenza

• Implementata dal modulo System.Web.SessionState.SessionStateModule

Page 80: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

80

BrowserBrowserServerServer

BrowserBrowser SessionSession

SessionSession

CookieCookie

CookieCookie

URL SessURL Sess

URL SessURL Sess

ASPNET_WP.EXEASPNET_WP.EXE

HttpRuntimeHttpRuntimeClassClass Modulo XModulo X SessionSession HTTP HandlerHTTP Handler

Pagina1.aspxPagina1.aspx

HttpRuntimeHttpRuntimeClassClass Modulo XModulo X SessionSession 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 81: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

81

• Session(“nome”) = Valore• Response.Write(Session(“nome”))• Non occorre definire le varibili

– Come nella vecchia versione– Ma occhio a controllarne l’esistenza prima di utilizzarne

un valore– Oppure valorizzare tutte la var nel Session_OnStart

Page 82: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

82

• <sessionState mode="Off|Inproc|StateServer|SQLServer" cookieless="true|false"

• timeout="number of minutes" stateConnectionString="tcpip=server:port" sqlConnectionString="sql connection string" />

• Off se non si usa

Page 83: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

83

• <sessionState cookieless=“true" />

• Non necessita di cookie abilitati sul client• Il cookie viene copiato nei vari Url linkati dalla pagina

– Http://xxx.com/3463287462764/pagina.aspx

• Utilizzabile in tutte le modalità– Session.Mode

• Gestiti dal filtro ISAPI ASPNET_FILTER.DLL

Page 84: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

84

<sessionState mode=“InProc” cookieless="true|false" <sessionState mode=“InProc” cookieless="true|false" /> />

• Più velocePiù veloce

• Singolo Server – No Load BalancingSingolo Server – No Load Balancing

• Se ASPNET_WP crasha – Addio SessionSe ASPNET_WP crasha – Addio Session

BrowserBrowser

ASPNET_WPASPNET_WP

BrowserBrowser SessionSession

SessionSession

CookieCookie

CookieCookie

URL SessURL Sess

URL SessURL Sess

Page 85: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

85

<sessionState mode=“StateServer” cookieless="true|false" <sessionState mode=“StateServer” cookieless="true|false"

stateConnectionString="tcpip=server3:42424" stateConnectionString="tcpip=server3:42424" /> />

• ASPNET_STATE Può girare anche sullo stesso serverASPNET_STATE Può girare anche sullo stesso server

• Se ASPNET_WP crasha – Le Session sopravvivonoSe ASPNET_WP crasha – Le Session sopravvivono

• Più lento di InProcess – Più veloce di SQL Server SessionPiù lento di InProcess – Più veloce di SQL Server Session

• Load BalancingLoad Balancing

• Se crasha ASPNET_STATE – Addio Sessioni di tutti i serverSe crasha ASPNET_STATE – Addio Sessioni di tutti i server

BrowserBrowser

ASPNET_WPASPNET_WP

SERVER 2SERVER 2BrowserBrowserCookieCookie

CookieCookie

URL SessURL Sess

URL SessURL SessASPNET_STATEASPNET_STATE

SERVER 3SERVER 3

SessionSessionBrowserBrowser CookieCookieURL SessURL Sess

ASPNET_WPASPNET_WP

SERVER 1SERVER 1

SessionSession

SessionSession

Page 86: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

86

<sessionState mode=“SQLServer” cookieless="true|false" <sessionState mode=“SQLServer” cookieless="true|false"

sqlConnectionString=“ConnString” sqlConnectionString=“ConnString” /> />

• SQL può girare anche sullo stesso serverSQL può girare anche sullo stesso server

• Se ASPNET_WP crasha – Le Session sopravvivonoSe ASPNET_WP crasha – Le Session sopravvivono

• Metodo più lento ma più sicuro (se in cluster)Metodo più lento ma più sicuro (se in cluster)

• Load Balancing Load Balancing

BrowserBrowser

ASPNET_WPASPNET_WP

SERVER 2SERVER 2BrowserBrowserCookieCookie

CookieCookie

URL SessURL Sess

URL SessURL Sess

SessionSessionBrowserBrowser CookieCookie

URL SessURL Sess

ASPNET_WPASPNET_WP

SERVER 1SERVER 1

SessionSession

SessionSession

Sql Sql Server oServer o

Sql Sql ClusterCluster

Page 87: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

87

• %WinDir%\Microsoft.NET\Framework\vxxxx\InstallSQLState.sql

• Per creare Database e Stored Procedure– DataBase: ASPState– SP: Insert, Get, Update

• I dati vengono appoggiati al TEMPDB– Al Restart di SQL Server le Session vengono perse– Possiamo modificare InstallSQLState per creare e

appoggiare i dati su un altro DB

• Nella 1.1 InstallPersistSQLState.sql

Page 88: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

88

0

200

400

600

800

1000

1200

1400

ASP.NET InProc ASP.NET State Store ASP.NET SQL Store

Req

ues

ts/S

ec (

2P S

erve

r)

Page 89: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

89

• Non abbiamo più i problemi di ASP 3.0– Nessun problema di COM Affinity– Load Balancing consentito

• Detto questo, non usatele se non ne avete bisogno– Togliere l’HttpModule da Machine.Config

• e <page enableSessionState=“false” />– Togliere il modulo dal Web.Config

• <httpModules>– <remove name=“Session” />

• </httpModules>• e <page enableSessionState=“false” />

– Disabilitare le session sulle pagine che non le utilizzano• @Page EnableSessionState=“false”

– Se una pagina legge solamente i valori senza scriverli• @Page EnableSessionState=“readonly”

Page 90: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

90

• Proprietà della classe Control• Contiene le informazioni di stato dei controlli• Dictionary della classe State• Si trasforma in un campo hidden

– Dopo Base64 Encoding – __VIEWSTATE

• Per default è null o empty• I valori possono essere letti e scritti anche da codice

– ViewState[“xxx”] = “ABC”

• http://blogs.aspitalia.com/ricciolo/category26.aspx

Page 91: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.
Page 92: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

92

• Il miglior modo di ottimizzare il codice è• Non eseguirlo !!!• Se i dati non cambiano in un arco di tempo

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

dinamico• Torniamo a FrontPage

– Mai ! magari a DreamWeaver

Page 93: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

93

• Implementato da System.Web.Caching.OutputCacheModule

ASPNET_WP.EXEASPNET_WP.EXE

HttpRuntimeHttpRuntimeClassClass OutputCacheOutputCache SessionSession HTTP HandlerHTTP Handler

Pagina1.aspxPagina1.aspx

HttpRuntimeHttpRuntimeClassClass OutputCacheOutputCache HTTP HandlerHTTP Handler

Pagina2.aspxPagina2.aspx

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

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

CacheCache

Page 94: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

94

• La pagina viene eseguita la prima volta– Viene cachata – E recuperata dalla cache per le richieste successive

• Direttiva di cache per la pagina– <%@ OutputCache Duration=“10”

VaryByParams=“none” %>

• Oppure da codice– Response.Cache.SetExpires(DateTime.Now.AddSeconds(

10))

Page 95: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

95

• La pagina potrebbe essere diversa in base al QueryString o alla POST

• VaryByParam– Cacha n copie della pagina in base ai parametri HTTP

GET / POST– Indicare i parametri da considerare separati da “;”– Supporta * (per tutti i parametri)– Esempio VaryByParam=“TipoCorso; SedeCorso”– Parametro obbligatorio

• Impostarlo a ‘none’

Page 96: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.
Page 97: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

97

• Classe Cache• Namespace System.Web.Caching• Oggetto Cache

– Esposto da Page.Response

• Memoria condivisa per tutta l’applicazione– Indipendente dall’utente– Accesso tramite Nome/Valore– Usarla per dati temporanei– Gli item usati “poco” vengono rimossi

• Supporta la notifica di rimozione tramite il Delegate CacheItemRemovedCallBack

Page 98: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

98

• Cache.Add o Cache.Insert• (

Nome,Valore,Dependency,Time,TimeSpan,Priority,CallBack

• )

Page 99: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.
Page 100: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

100

• None• Windows (default)• Forms• Passport

• Si impostano nel web.config

Page 101: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

101

• Lavora in una Intranet• Con gli account e gruppi esistenti• User.Identity.Name per Thread CLR• WindowsIdentity.GetCurrent().Name

per Thread SO• Test di appartenenza a gruppi

– User.IsInRole(WindowsBuiltInRole.Administrator)– User.IsInRole(“DevLeap\Administrators”)

• Domain\Group -> Domain\\Group in C#

Page 102: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

102

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

più attaccabile

• ASP.NET fornisce un’infrastruttura per evitare di svilupparsi tutto a mano– Utilizza i cookie– Automatizza le redirection– Completamente customizzabile

Page 103: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

103

• Selezionare Forms Authentication nel web.config– <authentication mode=“Forms” >

• Scegliere una pagina di login• <forms loginUrl=“login.aspx” />

• Opzionalmente dare un nome al cookie– Name=“App1”– Default: .ASPAUTH

Page 104: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

104

• <forms loginUrl=“Login.aspx”><credentials passwordFormat=“Clear”>

<user name=“RobertoB” password=“Pippo”/><user name=“LucaR” password=“Pippo”/>

</credentials>

• </forms>

• Password Case Sensitive• Possono essere criptate

Page 105: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

105

• Creare i campi di login– Username e password

• Inserire un pulsante di Login• Creare il codice per l’evento Click

– Usare la classe FormsAuthentication• If FA.Authenticate(usr, pwd)

– FA.RedirectFromLoginPage(usr)

Page 106: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

106

• Utenti in un Database• Pagina di Login

– Al login controlliamo gli account con le nostre regole in un database

– Usiamo la Redirect automatica– Che ci crea anche il cookie di login

• Demo LoginDb.aspx

Page 107: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

107

• Implementato da UrlAuthorizationModule• Si applica a tutte le modalità di autenticazione• I permessi si impostano

– Con Grant/Deny– Per Utenti e Ruoli

• Se Windows Authentication gli utenti corrispondono a quelli del SO– Authority\principal– Il modulo ritorna “401” su Access Denied

• IIS gira il codice 401 in una richiesta di autenticazione

Page 108: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

108

• <configuration><system.web>

<authorization><deny users=“?” /><allow users=“Dominio\Utente” /><allow roles=“Dominio\Gruppo” /><deny users=“*” />

</authorization><system.web>

• </configuration>

Page 109: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.
Page 110: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

110

• ASP Vs. ASP .NET• Debug.Assert ((VB.NET <> VB6) And

(VB.NET<>VBScript))• <% …%>• COM o non COM, questo è il dilemma…• Demo Ugrade

Page 111: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

111

• L'installazione di ASP .NET non impedisce il funzionamento delle applicazioni ASP esistenti

• Le applicazioni ASP e ASP .NET:– possono essere eseguite side-by-side (usano estensioni

di file differenti)– non condividono Session e Application

• Anche se è possibile farlo scrivendo tanto codice– Sono comunque possibili strategie di migrazione parziale

Page 112: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

112

• Il codice eseguito:– E’ compilato– Può utilizzare tutte le classi del Framework .NET– È un ambiente può “visuale” e produttivo– Sessioni cookieless e scalabili in una web farm– E’ un ambiente Object Oriented– E’ tipizzato– E’ tipizzato– E’ tipizzato

Page 113: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

113

• Gli oggetti Request e Response sono ancora supportati

• Gli include funzionano ancora• Supportano codice applicativo frammisto ad

HTML• La direttiva Language è ancora supportata (in

realtà viene sottointeso Page)• VB .NET sa “imitare” fin troppo bene VBScript

Page 114: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

114

• Le pagine ASP .NET supportano un solo linguaggio• Le pagine ASP .NET supportano più di una

direttiva• è necessario dichiarare le funzioni nelle pagine

ASP.NET in blocchi <script runat=server><% Sub DoSomething() Response.Write “Ciao a tutti !!!" End Sub

DoSomething%>

<script language="VB" runat=server> Sub DoSomething() Response.Write (“Ciao a tutti !!!") End Sub</script><% DoSomething()%>

Page 115: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

115

• ASP.NET non supporta le funzioni di rendering di pagina

<% Sub RenderSomething() %> <font color="red"> Sono le ore: <%=Now %> </font><% End Sub %>

<% RenderSomething RenderSomething%>

<script language="VB" runat=server>

Sub RenderSomething() Response.Write("<font color=red> ") Response.Write(“Sono le ore: " & Now) End Sub

</script>

<% RenderSomething() RenderSomething()%>

Page 116: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

116

• Option Explicit è impostato per default• è necessario dichiarare le variabili aventi scope

page-level in blocchi <script runat=server>• le "pagine" ASP .NET si chiamano Web Form • Molti dei settaggi di IIS per le applicazioni

ASP.NET vengono ignorati– La configurazione sta in ASP.NET

• Web.config• Machine.config

Page 117: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

117

• Eliminazione di Set e Let• Eliminazione delle proprietà predefinite non

indicizzate• Le parentesi sono necessarie per chiamare

procedure/funzioni (anche se non hanno parametri)• per default, gli argomenti sono passati ByVal• Possiamo avvalerci della tipizzazione• VB.NET e C# simili

– CLI– CLS

Page 118: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

118

• Il CLR consente agli oggetti .NET di interagire senza (particolari) difficoltà con i componenti COM tradizionali.

• Un componente può essere istanziato:– in late binding mediante Server.CreateObject(ProgId)– in early binding greando un assembly di interoperabilità

usando tblimp.exe o VS .NET– Mediante il tag <object>

• L’uso di componenti non free-threaded richiede l’inserimento dell’attributo ASPCompat=“True” nella direttiva Page

Page 119: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

119

• demo

Page 120: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

120

• Le applicazioni ASP “serie” non accedono al db, perché:– Ci hanno insegnato a implementarle con architettura

multi-tier– Ci hanno detto di incapsulare l’accesso ai dati e le regole

di business in componenti COM

• …e ora? • Possiamo migrare in 2 fasi:

– Pagine ASP Web Form ASP .NET– Server COM Assembly .NET

Page 121: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

121

• demo

Page 122: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.
Page 123: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

123

• Accesso a qualsiasi fonte dati relazionale e non– Privilegiato verso SQL Server– Dalla 1.1 privilegiato SQL Server / Oracle

• Modalità connessa alla fonte dati– Accesso ai dati in streaming

• Read-only, Forward-only– Performances e scalabilità– Nessun utilizzo involontario di cursori server-side

• Da gestire esplicitamente con comandi T-SQL• Modalità disconnessa dalla fonte dati

– Funzionalità estese di caching in-memory– Aggiornamenti batch– Indipendenza dalla fonte dati– Rappresentazione interna in XML

Page 124: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

124

.NET Application.NET Application

ODBCODBC

OLE DBOLE DB

Other DBMSOther DBMSNon-relationalNon-relational

sourcessources

OLE DB ProviderOLE DB Provider

SQL ServerSQL Server

TD

TD

SS

System.Data.SqlClientSystem.Data.SqlClient System.Data.OleDbSystem.Data.OleDbOtherOther

Other DSOther DS

DataSetDataSet

System.Data.OdbcSystem.Data.Odbc

Page 125: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

125

• Insieme di oggetti che implementano le interfacce di base per il data access– IDbConnection– IDbCommand– IDbDataReader– IDbDataRecord– IDbDataAdapter

• Creati come layer leggero tra la fonte dati e l’applicazione• Realizzati come codice Managed all’interno del .NET

Framework• Costituiscono la parte “connessa” alle varie fonti dati• Permettono l’utilizzo di comandi diretti verso le fonti dati

attraverso gli oggetti Command– Chiamata a Stored Procedure– Codice SQL dinamico

Page 126: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

126

• Nella v 1.0 ce ne sono due– SqlClient– OleDb– Altri installabili

• Nella v 1.1– ODBC– OracleClient di Microsoft– SqlServerCe

• Altri fornitori– Oracle da Oracle– “SqlServer” per la gestione di risorse lato server

• SQL Server 2005

Page 127: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

127

• È composto completamente da codice Managed• Contiene un parser TDS per comunicazioni efficienti con

SQL Server 7.0 o 2000• Non utilizza direttamente i cursori server di SQL Server

– Transazioni– Comandi T-SQL espliciti (OPEN CURSOR, sp_cursor,

sp_executesql ecc.)

• Permette di interagire con le funzionalità XML di SQL Server 2000– ExecuteXmlReader() di SqlCommand ritorna uno stream di

informazioni in XML

Page 128: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

128

SqlConnection

SqlCommand

.SqlParameterCollectionSqlDataReader

.Connection

.SqlParameter

.CreateCommand

.Parameters

.Item

.Add

.CreateParameter

.ExecuteReader

System.Xml.XmlReader

.ExecuteXmlReader

Object

.Item

Page 129: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

129

• Implementa l’interfaccia IDbConnection• Utilizzando la modalità “connessa” occorre aprire e chiudere

manualmente la connessione– Con SqlCommand e SqlDataReader– Chiamando il metodo Close o Dispose

• Permette di creare transazioni locali attraverso la BeginTransaction– Ritorna un oggetto SqlTransaction che rappresenta il contesto

della transazione• Utilizza connection pooling configurabile nella stringa di

connessione al database– Utilizza i Component Services come architettura di pooling– Da usare per migliorare la scalabilità– È abilitato per default ma può essere configurato

Page 130: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

130

• Implementa l’interfaccia IDbCommand– ExecuteReader

• Da utilizzare quando è previsto un result set come ritorno– ExecuteScalar

• Da utilizzare per aggregazioni o risultati di calcoli• Ritorna solo la prima colonna della prima riga, gli altri dati

vengono persi– ExecuteNonQuery

• Ottimizzato per query che non ritornano result set ma solo parametri di ritorno o numero di record modificati

– ExecuteOracleNonQuery (in OracleCommand)• == ma ritorno rowid come parametro output

Page 131: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

131

• Utilizzare la collezione Parameters per passare nella maniera migliore i parametri di input e output nelle chiamate

• I parametri sono nominali e non più posizionali– Occorre specificare correttamente il nome dei singoli

parametri– In OleDbCommand rimangono posizionali– In OracleCommand :nomepar

• Se eseguiamo una ExecuteReader e la stored procedure ritorna dati e parametri– Parametri accessibili solo alla chiusura del DataReader

Page 132: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

132

• Fornisce funzionalità di accesso read-only e forward-only su uno stream di record ritornati dall’esecuzione di un comando sul database

• Viene creato a partire da un oggetto SqlCommand• Il metodo Read legge la prima riga e le successive nello

stream fino al termine– Ritorna false al termine del result set

• Un solo record alla volta in memoria– Aumenta performance e scalabilità delle applicazioni

• Implementa l’interfaccia IEnumerable e quindi è possibile utilizzarlo come fonte dati nel DataBinding (in automatico solo con Web Controls)

Page 133: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

133

• Parametro output nel comando come REF Cursor• Eseguire il comando• Convertire il parametro in un tipo OracleRefCursor• Metodo GetDataReader sul tipo per ottenere

OracleDataReader• Usare OracleDataReader come un normale Data

Reader

Page 134: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

134

• I Managed Provider implementano le classi necessarie alla connessione verso una fonte dati

• La classe DataAdapter funziona da bridge per alimentare la parte disconnessa

• Il DataSet è il componente che implementa le funzionalità di In-Memory database

• Le modifiche fatte ai dati disconnessi possono essere riportate sulla fonte dati utilizzando i comandi associati al DataAdapter– Solo il comando di Select è indispensabile– È possibile costruire gli altri utilizzando il CommandBuilder– Conviene costruire i propri comandi che chiamano Stored Procedure

per eseguire le modifiche

Page 135: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

135

XmlXmlData SourceData Source

Page 136: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

136

• L’oggetto DataSet rappresenta un contenitore di dati in memoria e contiene una serie di– Tabelle– Relazioni tra le tabelle– Vincoli di integrità dei dati

• L’utilizzo di tali oggetti è assolutamente simile nelle funzionalità ad un database relazionale

• È possibile salvare i dati contenuti in formato XML e i relativi metadati in XSD (Xml Schema Definition)

Page 137: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

137

• Un DataSet è un in-memory database completamente indipendente

• Disconnesso da qualsiasi fonte dati• Contiene informazioni sui dati e sulla loro struttura (metadati)• Utilizza un accesso di tipo array based

– No navigazione tipo “MoveNext” ma diretto a righe e colonne

• È possibile associare uno schema XSD e “tipizzare” l’accesso alle informazioni– myDataSet.Customers(2).Name

• Dati rappresentati e serializzati in XML– Eredita da MarshalByValueObject e supporta ISerializable quindi può

essere serializzato durante operazioni di Remoting / Web Services

Page 138: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

138

DataSet

DataTableCollectionDataRelationsCollection

DataRelation DataTable

.DataColumnCollectionDataRowCollectionConstraintCollection

DataColumnDataRowConstraint

DataTable DataTable

DataColumn DataRow

.ChildRelations

.ParentRelations .Select

.Tables.Relations

.Item .Item

.Item .Item.Item

.Constraints .Rows .Columns.ChildTable

.ChildColumns

.ParentTable

.ParentColumns

Page 139: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

139

• Il DataSet non dipende dalla fonte dati utilizzata per popolarlo– È possibile utilizzare un oggetto di tipo DataAdapter per

popolare il DataSet– Il DataSet può essere popolato con informazioni

provenienti da differenti fonti dati• SQL Server, Oracle, File XML, ecc.

– Si può costruire la struttura via codice e utilizzarlo come data store senza nessun legame con una fonte dati

• Le DataTable utilizzano tipi di dati .NET, indipendenti dalla sorgente

Page 140: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

140

• Rappresenta il contenitore delle informazioni in memoria

• Struttura descritta da una collection di DataColumn e da una di Constraint– Primary Key– UniqueConstraint– ForeignKeyConstraint

• Supporta la Cascading DRI attraverso le proprietà DeleteRule e UpdateRule (come Sql Server...)

• La proprietà AcceptRejectRule consente di propagare le modifiche fatte su una tabella “master” ad una o più “details”

Page 141: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

141

Data

DataAdapter

Connection

SelectCommand

InsertCommand

UpdateCommand

DeleteCommand

DataSet

.Fill.Fill

.Updat.Updatee

CommandBuilder

Page 142: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

142

• L’operazione di query e l’apertura della connessione verso la fonte dati viene eseguita alla chiamata del metodo Fill dell’oggetto DataAdapter– Accetta come parametri il DataSet da utilizzare e il nome

di una tabella o un oggetto DataTable da riempire– Se la tabella non esiste viene creata

• La connessione al database viene creata (se necessario), aperta e chiusa automaticamente al riempimento del DataSet

Page 143: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

143

• Quando i dati arrivano al DataSet perdono ogni legame con la fonte dati

• È possibile recuperare lo schema dei dati che viene mantenuto in cache nel DataSet

• La rappresentazione interna di schema e dati è in formato XML

• È possibile alimentare il DataSet sia con dati relazionali che direttamente con documenti XML per dati e schema

Page 144: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

144

• Il DataSet– Carica/salva nativamente dati in formato XML– Supporta il caricamento di schema in formato XSD– Uno Schema può essere dedotto dai dati XML

• Il DataSet può essere associato ad un XmlDataDocument– Eredita ed estende XmlDocument– Espone una vista relazionale/tabellare sui dati XML– Permette un utilizzo avanzato dei dati XML

• Fortemente tipizzato• Collegato a controlli UI

– Permette l’utilizzo degli strumenti XML su dati relazionali • Validazioni dello schema• Trasformazioni XSL/T• Query XPath

Page 145: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

145

VS.NET Designers, Controls

XSLT, XPath, Validation

DataSetXMLDataDocument

XMLReader

XMLNodeReaderXMLTextReader

ManagedProvider

XML DocumentXML Stream

Page 146: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

146

• Dedicato a dati in formato XML– Utilizzato con il metodo ExecuteXmlReader() dell’oggetto

SqlCommand– Valido solo per query con la clausola FOR XML

• Solo in Sql Server 2000– Accesso ai dati Xml in modalità “single node”, un solo

nodo in memoria– Performante per grandi quantità di informazioni rispetto

al DataSet

Page 147: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

147

• Aggancio fra un elemento visivo e un dato– In modo dichiarativo– Molto semplice– Molto veloce– Molti datasource supportati– Tecnologia aperta anche per DB

• Automatizzata– Non come in VB (per fortuna)

• Più semplice agganciare codice ottimizzato per insert/update/delete

Page 148: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

148

• Controlli che supportano la proprietà DataSource• Possono essere agganciati a oggetti che

supportano IEnumerable o ICollection– DataTable/DataView– DataReader

• I controlli supportano il metodo DataBind()– Che valuta il loro DataSource e popola il controllo– Invoca anche il metodo DataBind() di tutti i controlli

Children– Come per la Page

Page 149: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

149

• DataSource = sorgente di dati• DataMember = interna alla sorgente• DataTextField = Valore da visualizzare• DataValueField = Valore “chiave”

Page 150: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

150

• 20– ListBox– Array di elementi– Utilizzo stesso DataSource per più controlli

• 21– ListBox da Database

Page 151: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

151

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

Page 152: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

152

• EditCommandColumn visualizza link per– EditCommand, UpdateCommand, CancelCommand

• OnEditCommand per gestire l’evento di editing• La DataGrid mantiene la proprietà EditItemIndex

– Riga da editare– -1 se in modalità visualizzazione

• DataGridCommandEventArgs viene passato ai vari handler

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

per accedere alla Primary Key da modificare

Page 153: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

153

• DataGrid– Update

• OnUpdateCommand– Delete

• OnDeleteCommand• Provare Demo: occhio al DB (Constraint etc etc)

• Si può fare paginazione– Automatica da DataGrid...poco efficiente– Automatica da DataAdapter...poco efficiente– Manuale (leggere www.devleap.com Articoli - ADO.NET)

Page 154: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

154

• Contenitore generico• Itera sui dati• Eseguendo il rendering dell’ItemTemplate per

ogni elemento della collezione DataSource• Utile per avere controllo completo sul rendering

dei dati

Page 155: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

155

• Visualizza i dati in una lista• Utile per visualizzazioni a lista

– Il default è righe/colonne

• Simile alla DataGrid ma– Più semplice da usare– Più leggera e quindi veloce

• Richiede almeno un ItemTemplate• Ogni template ha un suo stile

– HeaderStyle– ItemStyle

Page 156: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

156

• RepeatColumns = “x”• RepeatDirection = Horizontal/Vertical

Page 157: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

157

• Si possono caricare i template a RunTime• Controllo.ItemTemplate =

Page.LoadTemplate(“xxx.ascx”)

• N.B. Negli esempi non è stata usata la gestione degli errori !– Implementarla sempre nelle applicazioni !!!

Page 158: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

158

• DataReader– E’ nato per le estrazioni– Più veloce per estrazioni– Il web è stateless: toccata e fuga

• DataSet– Che ce ne facciamo ?

• Richiesta/Risposta : Fine delle trasmissioni• Perchè tenere l’oggetto in memoria per

aggiornamenti ?– Caching

Page 159: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

159

• Può contenere più DataTable• Ogni Table recuperata eventualmente da fonti

dati distinte• Può contenere strutture che non arrivano da

database• Può contenere relazioni fra DataTable.• Un DataSet inoltre può essere interamente

rappresentato in XML• Un Reader non deve essere usato per remotizzare

le chiamate da macchine diverse

Page 160: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

160

• Oggi abbiamo visto una introduzione a ASP.NET• Che fare adesso ?

– Andare in pensione – Security in ASP.NET

• Evento il 23 Marzo a Firenze (250 Euro) (http://devcon.devleap.con/oneday)

• Cap 2 libro ASP.NET Full contact (30 Euro)• 2 Articoli sul sito www.DevLeap.it

– ADO.NET• Webcast sul sito Microsoft di Silvano Coriani su ADO.NET• http://www.microsoft.com/italy/msdn/eventi/webcast/

passati.mspx– Architettura inside del prodotto

• Cap 1 libro ASP.NET Full Contact scaricabile grauitamente da www.devleap.it sezione libri)

Page 161: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

161

• ASP.NET gestisce anche Web Service– Webcast sul sito Microsoft Italia

http://www.microsoft.com/italy/msdn/eventi/webcast/passati.mspx

– Libro Web Service Full Contact

• Ma io oggi non ho capito qualcosa– Dal 20 marzo a maggio webcast sulla migrazione– In pratica per 5 lunedì un ora e mezza con Roberto

Brunetti via Internet sulle tematiche affrontate oggi – http://www.microsoft.com/italy/msdn/eventi/webcast

Page 162: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

162

• Non tralasciate il framework .NET– Webcast sul sito Microsoft Italia

http://www.microsoft.com/italy/msdn/eventi/webcast/passati.mspx

• Importante– Try/Catch– Garbage Collector– Interop (se avete componenti COM)– Security con Code Access Security

• Evento UGI.NET il 7 Aprile…– Architettura delle applicazioni– Application Block

• In generale– State attenti agli automatismi…comodi ma pericolosi

• In particolare nella versione 2.0• E’ importante sapere cosa succede prima di decidere di usarli• Ottimi in applicazioni “piccole”

Page 163: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

163

Milano, 7 aprile 2005organizzato da UGIdotNET, primo usergroup sulla tecnologia.NET

Writing Secure Code Fabio Santini

Code Access Security Raffaele Rialdi

ASP .NET Security Raffaele Rialdi

Securing Web Services Pierre Greborio

“Non-Admin” Developing Fabio Santini

Per iscriversi www.microsoft.com/italy/msdn/

Page 164: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.
Page 165: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

165

• Panoramica sulla nuova versione• Architettura• Building Block• Novità per

– Page– Application– Membership– Role Manager– Profile

Page 166: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

166

ASP.NET Whidbey “Building Block” API

MembershipMembership Role ManagerRole Manager PersonalizationPersonalization

Site NavigationSite Navigation Database Caching

Database Caching

ManagementManagement

Page 167: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

167

Providers

ASP.NET Whidbey “Building Block” API

MembershipMembership

Windows SQL Server Custom

Role ManagerRole Manager PersonalizationPersonalization

Site NavigationSite Navigation Database Caching

Database Caching

ManagementManagement

Provider Model Design Pattern

JET (Access)

Page 168: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

168

ASP.NET Whidbey “Building Block” API

MembershipMembership Role ManagerRole Manager PersonalizationPersonalization

Site NavigationSite Navigation Database Caching

Database Caching

ManagementManagement

Page 169: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

169

ASP.NET Whidbey “Building Block” API

MembershipMembership Role ManagerRole Manager PersonalizationPersonalization

Site NavigationSite Navigation Database Caching

Database Caching

ManagementManagement

Nuovo ASP.NET Whidbey “Page Framework”

Master PagesMaster Pages Themes/SkinsThemes/Skins Adaptive UIAdaptive UI

Page 170: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

170

New ASP.NET Whidbey “Building Block” APIs

MembershipMembership Role ManagerRole Manager PersonalizationPersonalization

Site NavigationSite Navigation Database Caching

Database Caching

ManagementManagement

New ASP.NET Whidbey “Page Framework” Features

Master PagesMaster Pages Themes/SkinsThemes/Skins Adaptive UIAdaptive UI

Nuovi Controlli (Oltre 40)

SecuritySecurity Web PartsWeb PartsDataData NavigationNavigation

Page 171: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

171

• Site.Master– Definisco contenuto generale– <asp:ContentPlaceHolder id=“Pippo” ... />

• @Page Master = Site.Master

– <asp:Content ContentPlaceHolderId=“Pippo”>• Contenuto della pagina

– </asp:Content>

Page 172: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

172

• Directory Theme– MioTema1

• Label.Skin– Background Blu – Foreground Bianco

• TextBox.skin– Background Bianco – Foreground Verde

– MioTema2• Label.Skin• TextBox.Skin

• @Page Theme=“MioTema1”

Page 173: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

173

• Cross-page Posting• Validation Group

– Blog di Cristian (http://ricciolo.aspitalia.com/)

• Url Rewriting• Site Counter• Precompilazione

– Blog di Cristian

• Recupero aspx da DB o altri store• Client script • Security per risorse non asp.net

Page 174: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

174

• Membership– Interfaccia per gestione dati di login

• Non per i dati dell’Utente (Nome etc) -> Personalization– Layer per eliminare codice ripetivo– Indipendente dallo store

• Secure Credential Storage Services– Algoritmi di Hashing per le credenziali– Elimina codice ripetitivo

• Gestione utenti– Validazione Credenziali / “Who is online”– Question/Answer password – Reset / Retrieve password

Page 175: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

175

Stored Procedures

Data Access Layer (DAL)

Business Logic Layer (BLL)

Page 176: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

176

Page 177: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

177

• Gestione User– Validate– Create, Delete, Update

• Finding/Getting User– Per Username / Email– Utenti online

• Gestione Password– Password reset– Question/Answer

Page 178: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

178

Sezione connStrings

Page 179: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

179

Page 180: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

180

• Login UI Server Control– Supporta AutoFormat– Convertibile in Template

• Si integra con– Forms Authentication– Membership

• Proprietà configurabili– Display, es. back color, fore color– Behavior, es. Redirect

Page 181: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

181

<asp:LoginName />• Visualizza il LoginName

– Stringa formattabile ‘Ciao {0}!”– Altrimenti visualizza User.Identity.Name

<asp:LoginStatus />• Indica

– Logged in: ‘Login’– Not Logged: ‘Logout’– Immagini o testo (HTML)

Page 182: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

182

Security Services / Application Programming Interfaces

MembershipMembership Role ManagerRole Manager

Data Storage

SQL Server 7 / 2000 / Yukon

AuthorizationManager Jet (Access) User Defined

Provider Model Design Pattern

Provider Model Design Pattern

Default Data Providers Custom

Integrated Server Controls

<asp:Login />

<asp:Login />

<asp:LoginView />

<asp:LoginView />

<asp:PasswordRecovery />

<asp:PasswordRecovery />

<asp:LoginStatus />

<asp:LoginStatus />

<asp:LoginName />

<asp:LoginName />

<asp:CreateUser />

<asp:CreateUser />

<asp:ChangePassword />

<asp:ChangePassword />

Page 183: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

183

• Accesso gestito da web.config

• Controllo da codice con IsUserInRole

<authorization><authorization>

<allow roles="Forum-<allow roles="Forum-Administrators" />Administrators" />

<deny users="*" /><deny users="*" />

</authorization></authorization>

User.IsUserInRole(usernameUser.IsUserInRole(username););

Page 184: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

184

• Role Manager– Mappa gli utenti sui ruoli– Elimina il codice per fare tutto questo– Costruito sulla API Role di ASP.NET 1.X

• Non legato a Membership– Lavorano bene insieme, ma…– Role Manager può essere utilizzato da solo– …così come Membership…

Page 185: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

185

Stored Procedures

Data Access Layer (DAL)

Business Logic Layer (BLL)

Page 186: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

186

Stessa Logica

Page 187: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

187

• Gestione Ruoli– Create, Delete, Update– IsUserInRole / RolesForUser

• Aggiunta/Rimozione– AddUser[s]ToRole– AddUser[s]ToRole[s]

• Ricerca User-to-role– GetRolesForUser– GetUsersInRole

Page 188: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

188

• Varia la visualizzazione– Anonymous– Logged– Appartenenza a ruoli

• Basato su Template– <loggedintemplate />– <anonymoustemplate />– <rolegroups />

Page 189: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.
Page 190: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

190

EmailEmail

Time zoneTime zone

Date FormatDate Format

UsernameUsername

Extended Extended PropertiesProperties

Page 191: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

191

• Memorizza le informazioni per ogni utente• Astrazione rispetto allo store• Elimina codice ripetitivo• Utente e Dati

– Informazioni sull’utente– Personalizzazione del contenuto

• SQL Server (o altro) back-end

Page 192: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

192

• Type-Safe e Strongly-Typed– Non basato su Dictionary– Nessun Cast richiesto– Proprietà esposte e “rintracciabili”

• Recupero dei dati Smart– On-demand Data Retrieval

• Accesso allo store solo quando utilizzato– Dati Partizionabili

• Basato su Provider Model– Altri store pluggable– Estendibile con altre funzionalità

Page 193: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

193

Page 194: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

194

• Definisce una Proprietà dell’utente– Name obbligatorio– Defaults System.String– Default allowAnonymous = false

• Attributi

name Nome proprietà

readOnly Solo lettura ?

serializeAs Come si serializzano i dati

provider Provider utilizzato

defaultValue Valore di Default

type .NET Data type

allowAnonymous Proprietà valida anche per accessi anonimi

Page 195: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.
Page 196: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

196

– SQL 7 e SQL 2000• Table Change Dependency

– No Row-Level• Richiesto Setup • Polling Model• Trigger (su Table) + SP (Check)

– SQL Server 2005• Result Set Dependency• Supportato da SqlCommand• Nessun Setup• Notification Model

Page 197: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

197

default.aspxweb.config

Page 198: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

198

N n1

data a

ASP.NETASP.NET SQL ServerSQL ServerNorthwind DatabaseNorthwind Database

tableName

changeIdChangeNotification tableChangeNotification table

Products tableProducts table

triggertrigger

productsproducts 11

SqlCacheDependencySqlCacheDependency

33

zz

aspnet_regsqlcache.exeaspnet_regsqlcache.exe

PagePage

DataSetDataSet

CacheCache

Page 199: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

199

• Notifiche più granulari– Es “Modifica dati in una tabella”– Es “quando il resutset di una SP cambia”

• Sfrutta caratteristiche Yukon– Nessun Trigger o servizi da installare– Invio Modifiche ai subscriber

• ADO.NET SqlCommand – Supportato solo da Yukon– bool NotificationAutoEnlist

Page 200: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

200

ASP.NETASP.NET SQL Server ‘Yukon’SQL Server ‘Yukon’

IISIIS

Northwind

HttpListenerHttpListener

Http.sysHttp.sys Notification Delivery ServiceNotification Delivery ServiceTCP Port 80

SqlCommandSqlCommandSqlCommandSqlCommand

SqlCacheDependencySqlCacheDependency

PagePage

DataSetDataSet

CacheCacheChange Change

DetectionDetection

Page 201: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

201

• www.aspitalia.com• www.devleap.com• www.ugidotnet.org• www.visual-basic.it• www.asp.net

Page 202: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

202

• Di tutto– Della partecipazione– Delle domande

• Ci sentiamo per posta o nei blog– [email protected]– http://Blogs.DevLeap.com/rob– http://Blogs.DevLeap.com

• Ci vediamo alla prossima– Magari il 23 marzo a Firenze per ASP.NET Security

Page 203: BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine.

203