La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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

Presentazioni simili


Presentazione sul tema: "BENVENUTI. 2 10.00Inizio 12.30Lunch 14.00Ripresa lavori 15.15Coffee Break 18.45Termine."— Transcript della presentazione:

1 BENVENUTI

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

3 Cenni di licensing

4 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 allinterno dei contratti di licensing)

5 5 Per tutti gli strumenti di sviluppo la Software Assurance è MSDN

6 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++) DescrizioneVersioneSKUPrezzo* Visual Studio.NET Professional 2003 Special Edition Standard Visual Studio.NET Professional 2003 Special Edition Upgrade* Diminuito il prezzo della versione full da a 992 Nuova opzione di aggiornamento: versione Upgrade per i possessori dei tool standard della famiglia VS.NET 2002 e 2003.

7 7 Diverse versioni: Library, Operating System, Professional, Enterprise, Universal Documentazione 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 Systems2 incidents MSDN Professional 2 incidents MSDN Enterprise 3 incidents MSDN Universal4 incidents Ricordarsi di attivare la licenza via Web dal sito MSDN!

8 8 KIT MSDN Universal…e diventi MCP! MSDN Universal Corso MOC 2310 Voucher esame Libro MOC Programming Microsoft ASP.NET KIT MSDN Professional MSDN Professional Introducing Microsoft ASP.NET 2.0

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

10 10 Per tutte le informazioni sui nostri eventi e webcast visitate registratevi direttamente alla Newsletter MSDN Flash.

11 MCSD MCAD MCSE+I MCSA MCT

12 12 Faccio parte di 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

13 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 laccesso 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

14 Client Server Richiesta HTTP default.htm IIS/Apache Risposta HTTP

15 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 VBScriptJavaScriptJava Applets CSS 2.0 XML

16 Client Server Richiesta HTTP Active Server Pages engine default.aspx IIS JScript VB / C# Esecuzione ADO.NET Recupero risultati Risposta HTTP ProductType=rock+shoes

17 17 Time For i = 1 to X –Response Next

18 18 Le informazioni vengono inviate a NomeRisorsa sotto forma di stringhe –txtNome=xxxx&txtCognome=yyyy Nel QueryString

19 19 Contiene le info del QueryString <% 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)%>

20 20 Le informazioni vengono inviate a NomeRisorsa sotto forma di stringhe –txtNome=xxxx&txtCognome=yyyy Nel form (non si vedono nel Querystring)

21 21 Contiene le info del Form <% 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)%>

22 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 dallutente

23 23 Ripresentare le informazioni digitate

24 24

I controlli mantengono lo stato

25 25 Recupero valori digitati in automatico Poi aggiungiamo il codice per contare

26 26 Oggetti programmabili Attributo runat=server Mantengono lo stato delle info Generano HTML per il client Espongono –Proprietà –Metodi Scatenano eventi

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

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

29 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

30 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

31 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è ?

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

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

34 34

35 35

36 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 linput

37 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

38 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

39 ASPXFile Request ASPXEngine Parsing Class File su DiscoGenerazione PageClass Istanza, Esecuzione e Rendering Response Request Creazione Istanza Response Code- behind file

40 40 A livello di controlla la compilazione –Molti per referenziare un assembly esterno –Come /r nei compilatori VBC.exe e per importare un namespace –Imports di VB.NET –using di C#;

41 41 ElencoCorsi.aspx ---codice--- Referenzia lAssembly GestioneCorsi.dll Codice VB (uno solo per pagina) Dichiarazione variabili obbligatoria (abilitare sempre) Queste direttive corrispondono a Vbc.exe /optionexplicit+ /r:GestioneCorsi.dll ElencoCorsi_aspx

42 42 LanguageLinguaggio utilizzato BufferResponse Buffering True/False ContentTypeHeader Content Type MIME EnableSessionStateSession True/False EnableViewStateViewState True/False SrcFile sorgente per code-behind InheritsBase Class diverse da Page ErrorPageURL per eccezioni non gestite ExplicitOption Explicit True/False StrictOption Strict True/False DebugCompilazione con simboli True/False TraceTracing True/False CompilerOptionsSwitch per VBC.exe o CSC.exe

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

44 44 Evento Load Riempire una ListBox Occhio al POST –Aggiunge sempre elementi –Perchè la listbox mantiene il suo stato

45 45 If Request.ServerVariables(HTTP_METHOD) diventa If Page.IsPostBack –Proprietà della classe Page –True se POST –False se GET

46 46 Evento Load Riempire una ListBox solo in Get I controlli mantengono lo stato

47 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? User Inserimento No Si Msg Errore Client Server Web Application Processing

48 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 lesecuzione Server-side...giustamente –Demo 17 Page.IsValid

49 49 Con i Server Control (

50 50 Uno solo per 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

51 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 !!!

52 52 Ci svela molti segreti Espone –Proprietà Request / Response –Metodi DataBind OnInit OnLoad –Eventi Init / Load / UnLoad –...

53 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

54 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(...)

55 55 Separare il layout dal codice Uno solo per CodeBehind=Codice.vb/cs Inherits=Classe

56 56 Il Code Behind non è unappendice della pagina ma la classe da cui viene ereditata la pagina

57 57 System.Web.UI.Page Public Class Codice Inherits 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 Codice Quindi le nuove proprietà, eventi e metodi rispetto a Page

58 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

59 59 Application_Start –Creo counter nel performance monitor –DevLeap / Richieste Totali Application_BeginRequest –Sommo 1 al contatore

60 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 questapplicazione AcquireRequestState PreRequestHandlerExecute Esecuzione della pagina PostRequestHandlerExecute ReleaseRequestState UpdateRequestCache EndRequest

61 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\ \CONFIG\Machine.Config

62 62 Può contenere costanti applicative –Connection String –Indirizzo WebMaster – Nel codice –strConn = Configuration.AppSettings( )

63 63 Semplice

64 64 Avanzato

65 65 Scatta per tutte le eccezioni non gestite –Accesso alla Request corrente –Accesso alloggetto Exception –Prendere provvedimenti Pagina di errore generica Oppure –Scrivere nellEventLog Semplicissimo con la classe EventLog –Mandare una mail Semplicissimo con la classe SmtpMail

66

67 67 INETINFO.exe ISAPI Extension Manager ASP.NET Worker 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 per eseguire il codice ASP.NET non usa ISAPI/ASP per eseguire il codice ISAPI Extension ASPNET_ISAPI.DLL redirige le richieste sul worker process di ASP.NET ISAPI Extension ASPNET_ISAPI.DLL redirige le richieste sul worker process di ASP.NET

68 68 ASPNET_WP.EXE HttpRuntime Class Modulo 1 Modulo 2 PageHandler Pagina1.aspx HttpRuntime Class Modulo 1 Modulo 2 PageHandler Pagina2.aspx ASP.NET worker thread 1 ASP.NET worker thread 2

69 69 ASPNET_WP.EXE HttpRuntime Class AuthentAuthoriz PageHandler Pagina1.aspx HttpRuntime Class Authent PageHandler Pagina2.aspx ASP.NET worker thread 1 ASP.NET worker thread 2

70 70

71 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

72 72

73 73

74

75 75 Il Web è stateless Mantenere lo stato delle informazioni –Valori –Variabili –Proprietà Server-Side per riutilizzarli fra richieste diverse Sulla stessa pagina Sullintera applicazione

76 76 Server Side –Web.Config –Application –Session (se cookie andrebbe dopo) –Caching Client/Server Side –Cookie –Hidden Field –QueryString –ViewState

77 77 Classe HttpApplicationState Oggetto Application Esposto come proprietà di –HttpContext e Page Memoria condivisa per tutta lapplicazione –Indipendente dallutente –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 lintera applicazione ASP.NET e non unarea di memoria

78 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

79 79 Classe HttpSessionState Oggetto Session Esposto come proprietà di –HttpContext e Page Memoria condivisa per tutta lapplicazione –Dipendente dallutente –Accesso tramite Nome/Valore –Non usarla per dati temporanei Difficile impostare una scadenza Implementata dal modulo System.Web.SessionState.SessionStateModule

80 80 Browser Server Browser Session Session Cookie Cookie URL Sess ASPNET_WP.EXE HttpRuntime Class Modulo X Session HTTP Handler Pagina1.aspx HttpRuntime Class Modulo X Session HTTP Handler Pagina2.aspx ASP.NET worker thread 1 ASP.NET worker thread 2

81 81 Session(nome) = Valore Response.Write(Session(nome)) Non occorre definire le varibili –Come nella vecchia versione –Ma occhio a controllarne lesistenza prima di utilizzarne un valore –Oppure valorizzare tutte la var nel Session_OnStart

82 82 Off se non si usa

83 83 Non necessita di cookie abilitati sul client Il cookie viene copiato nei vari Url linkati dalla pagina –Http://xxx.com/ /pagina.aspxHttp://xxx.com/ /pagina.aspx Utilizzabile in tutte le modalità –Session.Mode Gestiti dal filtro ISAPI ASPNET_FILTER.DLL

84 84 Più veloce Più veloce Singolo Server – No Load Balancing Singolo Server – No Load Balancing Se ASPNET_WP crasha – Addio Session Se ASPNET_WP crasha – Addio Session Browser ASPNET_WP Browser Session Session Cookie Cookie URL Sess

85 85 ASPNET_STATE Può girare anche sullo stesso server ASPNET_STATE Può girare anche sullo stesso server Se ASPNET_WP crasha – Le Session sopravvivono Se ASPNET_WP crasha – Le Session sopravvivono Più lento di InProcess – Più veloce di SQL Server Session Più lento di InProcess – Più veloce di SQL Server Session Load Balancing Load Balancing Se crasha ASPNET_STATE – Addio Sessioni di tutti i server Se crasha ASPNET_STATE – Addio Sessioni di tutti i server Browser ASPNET_WP SERVER 2 Browser Cookie Cookie URL Sess ASPNET_STATE SERVER 3 Session Browser Cookie URL Sess ASPNET_WP SERVER 1 Session Session

86 86 SQL può girare anche sullo stesso server SQL può girare anche sullo stesso server Se ASPNET_WP crasha – Le Session sopravvivono Se 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 Browser ASPNET_WP SERVER 2 Browser Cookie Cookie URL Sess Session Browser Cookie ASPNET_WP SERVER 1 Session Session Sql Server o Sql Cluster

87 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

88 ASP.NET InProcASP.NET State StoreASP.NET SQL Store Requests/Sec (2P Server)

89 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 lHttpModule da Machine.Config e –Togliere il modulo dal Web.Config – e –Disabilitare le session sulle pagine che non le EnableSessionState=false –Se una pagina legge solamente i valori senza EnableSessionState=readonly

90 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

91

92 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

93 93 Implementato da System.Web.Caching.OutputCacheModule ASPNET_WP.EXE HttpRuntime Class OutputCacheSession HTTP Handler Pagina1.aspx HttpRuntime Class OutputCache HTTP Handler Pagina2.aspx ASP.NET worker thread 1 ASP.NET worker thread 2 Cache

94 94 La pagina viene eseguita la prima volta –Viene cachata –E recuperata dalla cache per le richieste successive Direttiva di cache per la pagina – Oppure da codice –Response.Cache.SetExpires(DateTime.Now.AddSeconds(10))

95 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

96

97 97 Classe Cache Namespace System.Web.Caching Oggetto Cache –Esposto da Page.Response Memoria condivisa per tutta lapplicazione –Indipendente dallutente –Accesso tramite Nome/Valore –Usarla per dati temporanei –Gli item usati poco vengono rimossi Supporta la notifica di rimozione tramite il Delegate CacheItemRemovedCallBack

98 98 Cache.Add o Cache.Insert ( Nome, Valore, Dependency, Time, TimeSpan, Priority, CallBack )

99

100 100 None Windows (default) Forms Passport Si impostano nel web.config

101 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#

102 102 Lautenticazione 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 uninfrastruttura per evitare di svilupparsi tutto a mano –Utilizza i cookie –Automatizza le redirection –Completamente customizzabile

103 103 Selezionare Forms Authentication nel web.config – Scegliere una pagina di login Opzionalmente dare un nome al cookie –Name=App1 –Default:.ASPAUTH

104 104 Password Case Sensitive Possono essere criptate

105 105 Creare i campi di login –Username e password Inserire un pulsante di Login Creare il codice per levento Click –Usare la classe FormsAuthentication If FA.Authenticate(usr, pwd) –FA.RedirectFromLoginPage(usr)

106 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

107 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

108 108

109

110 110 ASP Vs. ASP.NET Debug.Assert ((VB.NET <> VB6) And (VB.NET<>VBScript)) COM o non COM, questo è il dilemma… Demo Ugrade

111 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

112 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

113 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

114 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 <% Sub DoSomething() Response.Write Ciao a tutti !!!" End Sub DoSomething %> Sub DoSomething() Response.Write (Ciao a tutti !!!") End Sub <% DoSomething() %>

115 115 ASP.NET non supporta le funzioni di rendering di pagina Sono le ore: <% RenderSomething %> Sub RenderSomething() Response.Write(" ") Response.Write(Sono le ore: " & Now) End Sub <% RenderSomething() %>

116 116 Option Explicit è impostato per default è necessario dichiarare le variabili aventi scope page-level in blocchi 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

117 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

118 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 Luso di componenti non free-threaded richiede linserimento dellattributo ASPCompat=True nella direttiva Page

119 119 demo

120 120 Le applicazioni ASP serie non accedono al db, perché: –Ci hanno insegnato a implementarle con architettura multi-tier –Ci hanno detto di incapsulare laccesso 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

121 121 demo

122

123 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

124 124.NET Application ODBC OLE DB Other DBMS Non-relationalsources OLE DB Provider SQL Server TDS System.Data.SqlClientSystem.Data.OleDbOther Other DS DataSet System.Data.Odbc

125 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 lapplicazione Realizzati come codice Managed allinterno del.NET Framework Costituiscono la parte connessa alle varie fonti dati Permettono lutilizzo di comandi diretti verso le fonti dati attraverso gli oggetti Command –Chiamata a Stored Procedure –Codice SQL dinamico

126 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

127 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

128 128 SqlConnection SqlCommand.SqlParameterCollectionSqlDataReader.Connection.SqlParameter.CreateCommand.Parameters.Item.Add.CreateParameter.ExecuteReader System.Xml.XmlReader.ExecuteXmlReader Object.Item

129 129 Implementa linterfaccia 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

130 130 Implementa linterfaccia 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

131 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

132 132 Fornisce funzionalità di accesso read-only e forward-only su uno stream di record ritornati dallesecuzione 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 linterfaccia IEnumerable e quindi è possibile utilizzarlo come fonte dati nel DataBinding (in automatico solo con Web Controls)

133 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

134 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

135 135 Xml Data Source

136 136 Loggetto DataSet rappresenta un contenitore di dati in memoria e contiene una serie di –Tabelle –Relazioni tra le tabelle –Vincoli di integrità dei dati Lutilizzo 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)

137 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 laccesso 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

138 138 DataSet DataTableCollectionDataRelationsCollection DataRelationDataTable.DataColumnCollectionDataRowCollectionConstraintCollection DataColumnDataRowConstraint DataTable DataColumnDataRow.ChildRelations.ParentRelations.Select.Tables.Relations.Item.Constraints.Rows.Columns.ChildTable.ChildColumns.ParentTable.ParentColumns

139 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

140 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

141 141 Data DataAdapter Connection Select Command Insert Command Update Command Delete Command DataSet.Fill.Update CommandBuilder

142 142 Loperazione di query e lapertura della connessione verso la fonte dati viene eseguita alla chiamata del metodo Fill delloggetto 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

143 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

144 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 lutilizzo degli strumenti XML su dati relazionali Validazioni dello schema Trasformazioni XSL/T Query XPath

145 145 VS.NET Designers, Controls XSLT, XPath, Validation DataSetXMLDataDocument XMLReader XMLNodeReaderXMLTextReader Managed Provider XML Document XML Stream

146 146 Dedicato a dati in formato XML –Utilizzato con il metodo ExecuteXmlReader() delloggetto 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

147 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

148 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

149 149 DataSource = sorgente di dati DataMember = interna alla sorgente DataTextField = Valore da visualizzare DataValueField = Valore chiave

150 –ListBox –Array di elementi –Utilizzo stesso DataSource per più controlli 21 –ListBox da Database

151 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

152 152 EditCommandColumn visualizza link per –EditCommand, UpdateCommand, CancelCommand OnEditCommand per gestire levento 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 Nellhandler UpdateCommand si usa DataKeyField per accedere alla Primary Key da modificare

153 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 Articoli - ADO.NET)www.devleap.com

154 154 Contenitore generico Itera sui dati Eseguendo il rendering dellItemTemplate per ogni elemento della collezione DataSource Utile per avere controllo completo sul rendering dei dati

155 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

156 156 RepeatColumns = x RepeatDirection = Horizontal/Vertical

157 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 !!!

158 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 loggetto in memoria per aggiornamenti ? –Caching

159 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

160 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)http://devcon.devleap.con/oneday Cap 2 libro ASP.NET Full contact (30 Euro) 2 Articoli sul sito –ADO.NET Webcast sul sito Microsoft di Silvano Coriani su ADO.NET –Architettura inside del prodotto Cap 1 libro ASP.NET Full Contact scaricabile grauitamente da sezione libri)

161 161 ASP.NET gestisce anche Web Service –Webcast sul sito Microsoft Italia –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

162 162 Non tralasciate il framework.NET –Webcast sul sito Microsoft Italia 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

163 163 Milano, 7 aprile 2005 organizzato da UGIdotNET, primo usergroup sulla tecnologia.NET Writing Secure CodeFabio Santini Code Access SecurityRaffaele Rialdi ASP.NET SecurityRaffaele Rialdi Securing Web ServicesPierre Greborio Non-Admin DevelopingFabio Santini Per iscriversi

164

165 165 Panoramica sulla nuova versione Architettura Building Block Novità per –Page –Application –Membership –Role Manager –Profile

166 166 ASP.NET Whidbey Building Block API Membership Role Manager Personalization Site Navigation Database Caching Management

167 167 Providers ASP.NET Whidbey Building Block API Membership Windows SQL Server Custom Role Manager Personalization Site Navigation Database Caching Management Provider Model Design Pattern JET (Access)

168 168 ASP.NET Whidbey Building Block API Membership Role Manager Personalization Site Navigation Database Caching Management

169 169 ASP.NET Whidbey Building Block API Membership Role Manager Personalization Site Navigation Database Caching Management Nuovo ASP.NET Whidbey Page Framework Master Pages Themes/Skins Adaptive UI

170 170 New ASP.NET Whidbey Building Block APIs Membership Role Manager Personalization Site Navigation Database Caching Management New ASP.NET Whidbey Page Framework Features Master Pages Themes/Skins Adaptive UI Nuovi Controlli (Oltre 40) Security Web Parts Data Navigation

171 171 Site.Master –Definisco contenuto generale Master = Site.Master – Contenuto della pagina –

172 172 Directory Theme –MioTema1 Label.Skin –Background Blu – Foreground Bianco TextBox.skin –Background Bianco – Foreground Verde –MioTema2 Label.Skin Theme=MioTema1

173 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

174 174 Membership –Interfaccia per gestione dati di login Non per i dati dellUtente (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

175 175 Stored Procedures Data Access Layer (DAL) Business Logic Layer (BLL)

176 176

177 177 Gestione User –Validate –Create, Delete, Update Finding/Getting User –Per Username / –Utenti online Gestione Password –Password reset –Question/Answer

178 178 Sezione connStrings

179 179

180 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

181 181 Visualizza il LoginName –Stringa formattabile Ciao {0}! –Altrimenti visualizza User.Identity.Name Indica –Logged in: Login –Not Logged: Logout –Immagini o testo (HTML)

182 182 Security Services / Application Programming Interfaces Membership Role Manager Data Storage SQL Server 7 / 2000 / Yukon Authorization Manager Jet (Access) User Defined Provider Model Design Pattern Default Data Providers Custom Integrated Server Controls

183 183 Accesso gestito da web.config Controllo da codice con IsUserInRole User.IsUserInRole(username);

184 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…

185 185 Stored Procedures Data Access Layer (DAL) Business Logic Layer (BLL)

186 186 Stessa Logica

187 187 Gestione Ruoli –Create, Delete, Update –IsUserInRole / RolesForUser Aggiunta/Rimozione –AddUser[s]ToRole –AddUser[s]ToRole[s] Ricerca User-to-role –GetRolesForUser –GetUsersInRole

188 188 Varia la visualizzazione –Anonymous –Logged –Appartenenza a ruoli Basato su Template –

189

190 190 Time zone Date Format Username Extended Properties

191 191 Memorizza le informazioni per ogni utente Astrazione rispetto allo store Elimina codice ripetitivo Utente e Dati –Informazioni sullutente –Personalizzazione del contenuto SQL Server (o altro) back-end

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

193 193

194 194 Definisce una Proprietà dellutente –Name obbligatorio –Defaults System.String –Default allowAnonymous = false Attributi nameNome proprietà readOnlySolo lettura ? serializeAsCome si serializzano i dati providerProvider utilizzato defaultValueValore di Default type.NET Data type allowAnonymousProprietà valida anche per accessi anonimi

195

196 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

197 197 default.aspx web.config

198 198 Nn1 dataa ASP.NET SQL Server Northwind Database tableNam e changeId ChangeNotification table Products table trigger products 1 SqlCacheDependency 3 z aspnet_regsqlcache.exe Page DataSet Cache

199 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

200 200 ASP.NET SQL Server Yukon IIS Northwind HttpListener Http.sys Notification Delivery Service TCP Port 80 SqlCommandSqlCommand SqlCacheDependency Page DataSet Cache Change Detection

201

202 202 Di tutto –Della partecipazione –Delle domande Ci sentiamo per posta o nei blog –http://Blogs.DevLeap.com/rob –http://Blogs.DevLeap.comhttp://Blogs.DevLeap.com Ci vediamo alla prossima –Magari il 23 marzo a Firenze per ASP.NET Security

203 203


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

Presentazioni simili


Annunci Google