La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

BENVENUTI.

Presentazioni simili


Presentazione sul tema: "BENVENUTI."— Transcript della presentazione:

1 BENVENUTI

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

3 Cenni di licensing

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)

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

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

7 Documentazione Tecnica Beta e Service Pack
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 Systems 2 incidents MSDN Professional incidents MSDN Enterprise 3 incidents MSDN Universal 4 incidents Ricordarsi di attivare la licenza via Web dal sito MSDN!

8 Omaggio -10% Omaggio -10% Omaggio
KIT MSDN Universal…e diventi MCP! € € Corso MOC 2310 Voucher esame 1.550€ Libro MOC Programming Microsoft ASP.NET MSDN Universal 3.353€ € Omaggio -10% Omaggio KIT MSDN Professional € € MSDN Professional 1.481€ € Introducing Microsoft ASP.NET 2.0 -10% Omaggio

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

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

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

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

15 Browser ActiveX Controls VBScript DHTML JavaScript Java Applets CSS 2.0 XML Internet Explorer 5.x 6.x Internet Explorer 4.x Netscape Navigator 4.x Netscape Navigator 3.x Microsoft WebTV

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

17 Time For i = 1 to X Response Next

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

19 Demo 05 Contiene le info del QueryString
<% first=Request.QueryString("txtfname")%> <% first=Request.QueryString(“txtfname”) last =Request.QueryString(“txtlname”) Response.Write(“Welcome” & first & last)%> Demo 05

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)

21 Demo 06 Contiene le info del Form
<% first=Request.Form("txtNome")%> <% first=Request.Form(“txtNome”) last =Request.Form(“txtCognome”) Response.Write(“Ciao” & first & last)%> Demo 06

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

23 Demo 07 Ripresentare le informazioni digitate <INPUT TYPE=“TEXT”
NAME=“txtNome” VALUE=<%=Request.QueryString(“txtNome”)%> > Demo 07

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

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

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

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

28 value=“Premi” runat=“server” onServerClick=“EseguiOperazioni”>
<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

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>

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 Modifica attributo al click Disable su Controllo Disable su Pagina
ViewState View Source Modifica attributo al click Azzera: Cambia colore pulsante Disable su Controllo Non tiene il bgcolor Disable su Pagina Comunque txtConta ha sepre il valore Perchè ?

32 HTML Control Web Controls Sintassi HTML Mappati 1:1 con controlli HTML
Namespace System.Web.UI.HtmlControls Web Controls Sintassi diversa Tutti gli HTML Control Più controlli avanzati Maggiori funzionalità

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

34

35 <asp:TextBox ... <asp:ListBox ... Strongly-typed BackColor=“red”
Mantenere lo stato significa anche riposizionare la combo-box Si possono aggiungere elementi Reflector (listbox.rendercontents)

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

37 Controlli complessi (Rich Control)
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 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 Istanza, Esecuzione e Rendering
Code- behind file ASPX Engine Parsing Class File su Disco Generazione ASPX File Request Creazione Istanza Request Page Class Istanza, Esecuzione e Rendering Response Response

40 @Page controlla la compilazione
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#; 

41 ElencoCorsi.aspx Language=“VB” Explicit=“True” %> name=“GestioneCorsi” %> namespace=“Corsi” %> ---codice--- Codice VB (uno solo per pagina) Dichiarazione variabili obbligatoria (abilitare sempre) Referenzia l’Assembly GestioneCorsi.dll Queste direttive corrispondono a Vbc.exe /optionexplicit+ /r:GestioneCorsi.dll ElencoCorsi_aspx

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

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

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

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

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

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

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

49 ClientTarget="DownLevel“ ClientTarget=“UpLevel“
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

50 Demo 18 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 Demo 18

51 File con estensione VB / CS Definisce una classe
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 WinCV.exe Ci svela molti segreti Espone Proprietà Request / Response
Metodi DataBind OnInit OnLoad Eventi Init / Load / UnLoad ... WinCV.exe

53 Deriva da System.Web.UI.TemplateControl La pagina è un controllo !!!
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 Demo 29 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(...) Demo 29

55 Separare il layout dal codice
Uno solo per pagina @Page CodeBehind=“Codice.vb/cs” Inherits=“Classe”

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

57 Public Class Codice Inherits S.W.U.Page @Page Inherits=“Codice”
.dll System.Web.UI.Page public Event EventHandler Load public bool IsPostBack {get;} public HttpRequest {get;} public HttpResponse {get;} .VB 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 Public Class Codice Inherits S.W.U.Page .aspx <asp:TextBox Id=“txtName” /> La pagina eredita la Classe Codice Quindi le nuove proprietà, eventi e metodi rispetto a Page @Page Inherits=“Codice”

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 Application_BeginRequest
Application_Start Creo counter nel performance monitor DevLeap / Richieste Totali Application_BeginRequest Sommo 1 al contatore

60 Inizializzazione del gestore della risorsa Session_Start
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

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

62 Demo Web.Config Può contenere costanti applicative <appSettings>
Connection String Indirizzo WebMaster <appSettings> <add key=“ ” /> </appSettings> Nel codice strConn = Configuration.AppSettings(“ ”)

63 Demo 28 + Config “Semplice” <configuration> <system.web>
<customErrors mode=“remoteonly” defaultRedirect=“error.htm”/> </system.web> </configuration> Demo 28 + Config

64 Web.Config + NotFound “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> Web.Config + NotFound

65 Global.asax Scatta per tutte le eccezioni non gestite Oppure
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 Global.asax

66

67 ISAPI Extension Manager ISAPI Extension Manager
ASP.NET non usa ISAPI/ASP per eseguire il codice ISAPI Extension ASPNET_ISAPI.DLL redirige le richieste sul worker process di ASP.NET HTTP Request .ASPX .ASMX .ASHX .DISCO .SOAP INETINFO.exe INETINFO.exe ASP.NET Worker Process ISAPI Extension Manager ISAPI Extension Manager ASPNET_ISAPI.DLL ASP.DLL ASP.NET Pipeline

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

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

70 Demo Machine.Config <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> Demo Machine.Config

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 <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= , Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false"/> <add verb="*" path="*.rem" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version= , Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/> <add verb="*" path="*.soap" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version= , Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>

73 <add verb=". " path=". asax" type="System. Web
<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> Demo Machine.Config

74

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

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

77 Demo Global.asax + 35 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 Demo Global.asax + 35

78 In ASP 1/2/3 le session In ASP.NET le session
Necessitano del supporto dei cookie sul client Sono single-machine e non adatte a 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 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

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

81 Demo 36 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 Demo 36

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

83 Demo URL IIS Filters <sessionState cookieless=“true" />
Non necessita di cookie abilitati sul client Il cookie viene copiato nei vari Url linkati dalla pagina Utilizzabile in tutte le modalità Session.Mode Gestiti dal filtro ISAPI ASPNET_FILTER.DLL Demo URL IIS Filters

84 <sessionState mode=“InProc” cookieless="true|false" />
ASPNET_WP Browser Session Cookie URL Sess Session Browser Cookie URL Sess <sessionState mode=“InProc” cookieless="true|false" /> Più veloce Singolo Server – No Load Balancing Se ASPNET_WP crasha – Addio Session

85 Demo Servizio ASPNET_WP Browser ASPNET_STATE SERVER 3 SERVER 1 Browser
Cookie URL Sess Browser Cookie Session URL Sess Session Browser ASPNET_WP SERVER 2 Cookie Session URL Sess <sessionState mode=“StateServer” cookieless="true|false" stateConnectionString="tcpip=server3:42424" /> ASPNET_STATE Può girare anche sullo stesso server Se ASPNET_WP crasha – Le Session sopravvivono Più lento di InProcess – Più veloce di SQL Server Session Load Balancing Se crasha ASPNET_STATE – Addio Sessioni di tutti i server Demo Servizio

86 Sql Server o Sql Cluster
Browser Sql Server o Sql Cluster ASPNET_WP SERVER 1 Cookie URL Sess Browser Cookie URL Sess Session Browser ASPNET_WP SERVER 2 Session Cookie URL Sess Session <sessionState mode=“SQLServer” cookieless="true|false" sqlConnectionString=“ConnString” /> SQL può girare anche sullo stesso server Se ASPNET_WP crasha – Le Session sopravvivono Metodo più lento ma più sicuro (se in cluster) Load Balancing SQL Profiler

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 Tabelle e SP .SQL

88 200 400 600 800 1000 1200 1400 ASP.NET InProc ASP.NET State Store ASP.NET SQL Store Requests/Sec (2P Server)

89 Demo 37 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> Disabilitare le session sulle pagine che non le utilizzano @Page EnableSessionState=“false” Se una pagina legge solamente i valori senza scriverli @Page EnableSessionState=“readonly” Demo 37

90 Demo 39 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” Demo 39

91

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 HTTP Handler Pagina1.aspx HTTP Handler Pagina2.aspx
Implementato da System.Web.Caching.OutputCacheModule Cache ASPNET_WP.EXE ASP.NET worker thread 1 HttpRuntime Class OutputCache Session HTTP Handler Pagina1.aspx ASP.NET worker thread 2 HttpRuntime Class OutputCache HTTP Handler Pagina2.aspx

94 Demo 40 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)) Demo 40

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’ Demo 41

96

97 Namespace System.Web.Caching Oggetto Cache
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

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

99

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

101 Demo 75 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 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

103 Web.Config 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 Web.Config

104 Web.Config <forms loginUrl=“Login.aspx”> </forms>
<credentials passwordFormat=“Clear”> <user name=“RobertoB” password=“Pippo”/> <user name=“LucaR” password=“Pippo”/> </credentials> </forms> Password Case Sensitive Possono essere criptate Web.Config

105 Login.aspx + 76 Creare i campi di login Inserire un pulsante 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) Login.aspx + 76

106 Utenti in un Database Pagina di Login Demo LoginDb.aspx
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 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 Web.Config <configuration> </configuration>
<system.web> <authorization> <deny users=“?” /> <allow users=“Dominio\Utente” /> <allow roles=“Dominio\Gruppo” /> <deny users=“*” /> </authorization> </configuration> Web.Config

109

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

111 Le applicazioni ASP e ASP .NET:
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 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 

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 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> Response.Write (“Ciao a tutti !!!") </script> DoSomething() DoSomething()", "width": "800" }

115 ASP.NET non supporta le funzioni di rendering di pagina
<% Sub RenderSomething() %> <font color="red"> Sono le ore: <%=Now %> </font> <% End Sub %> <% RenderSomething %> <script language="VB" runat=server> Sub RenderSomething() Response.Write("<font color=red> ") Response.Write(“Sono le ore: " & Now) End Sub </script> RenderSomething() RenderSomething()", "width": "800" }

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

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 Un componente può essere istanziato:
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

119 demo

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

121 demo

122

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 .NET Application OLE DB ODBC SQL Server Other DBMS
DataSet Other System.Data.SqlClient System.Data.OleDb System.Data.Odbc OLE DB OLE DB Provider TDS ODBC Other DS SQL Server Other DBMS Non-relational sources

125 Creati come layer leggero tra la fonte dati e l’applicazione
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

126 Nella v 1.0 ce ne sono due Nella v 1.1 Altri fornitori 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 È 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 .SqlParameterCollection
SqlConnection .CreateCommand SqlCommand .Connection .ExecuteXmlReader .ExecuteReader .Parameters System.Xml.XmlReader SqlDataReader .SqlParameterCollection .Add .Item .Item .CreateParameter Object .SqlParameter

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

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

131 I parametri sono nominali e non più posizionali
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 Viene creato a partire da un oggetto SqlCommand
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)

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 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 Xml Data Source

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)

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

138 DataRelationsCollection DataTableCollection
DataSet .Relations .Tables DataRelationsCollection DataTableCollection .Item .Item DataRelation .ChildRelations DataTable .Select .ParentRelations .ParentTable .ChildTable .Constraints .Rows .Columns DataTable DataTable ConstraintCollection DataRowCollection .DataColumnCollection .ParentColumns .ChildColumns .Item .Item .Item DataColumn DataRow Constraint DataRow DataColumn

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 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 Data DataSet Select Command CommandBuilder DataAdapter Insert Command
Connection .Fill Update Command .Update Data Delete Command DataSet

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

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 Il DataSet può essere associato ad un XmlDataDocument
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

145 VS.NET Designers, Controls
XSLT, XPath, Validation VS.NET Designers, Controls XMLDataDocument DataSet Managed Provider XMLReader XML Stream XMLTextReader XMLNodeReader XML Document

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

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 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 DataSource = sorgente di dati
DataMember = interna alla sorgente DataTextField = Valore da visualizzare DataValueField = Valore “chiave”

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

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

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

153 Si può fare paginazione
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)

154 Demo 51 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 Demo 51

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 RepeatColumns = “x” RepeatDirection = Horizontal/Vertical Demo 52

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

158 DataReader DataSet 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

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

162 Non tralasciate il framework .NET Importante
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 organizzato da UGIdotNET, primo usergroup sulla tecnologia .NET
Milano, 7 aprile 2005 organizzato da UGIdotNET, primo usergroup sulla tecnologia .NET Writing Secure Code Fabio Santini Code Access Security Raffaele Rialdi ASP .NET Security Securing Web Services Pierre Greborio “Non-Admin” Developing Per iscriversi

164

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

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

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

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

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

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

171 @Page Master = Site.Master
Definisco contenuto generale <asp:ContentPlaceHolder id=“Pippo” ... /> @Page Master = Site.Master <asp:Content ContentPlaceHolderId=“Pippo”> Contenuto della pagina </asp:Content> /MasterPages

172 @Page Theme=“MioTema1”
Directory Theme MioTema1 Label.Skin Background Blu – Foreground Bianco TextBox.skin Background Bianco – Foreground Verde MioTema2 TextBox.Skin @Page Theme=“MioTema1” /ThemeSkin

173 Recupero aspx da DB o altri store Client script
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 Secure Credential Storage Services
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

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

176 Membership/LoginManuale.aspx

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

178 Demo Sezione connStrings

179

180 Login.aspx Login UI Server Control Si integra con
Supporta AutoFormat Convertibile in Template Si integra con Forms Authentication Membership Proprietà configurabili Display, es. back color, fore color Behavior, es. Redirect Login.aspx

181 <asp:LoginName />
Default.aspx 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) Default.aspx

182 Default Data Providers Custom
Security Services / Application Programming Interfaces Membership Role Manager Data Storage SQL Server 7 / / Yukon Authorization Manager Jet (Access) User Defined Provider Model Design Pattern Default Data Providers Custom Integrated Server Controls <asp:Login /> <asp:LoginView /> <asp:PasswordRecovery /> <asp:LoginStatus /> <asp:LoginName /> <asp:CreateUser /> <asp:ChangePassword />

183 Accesso gestito da web.config
Controllo da codice con IsUserInRole <authorization> <allow roles="Forum-Administrators" /> <deny users="*" /> </authorization> User.IsUserInRole(username);

184 Non legato a Membership
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 Data Access Layer (DAL) Business Logic Layer (BLL)
Stored Procedures Data Access Layer (DAL) Business Logic Layer (BLL)

186 Stessa Logica

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

188 Default.aspx Varia la visualizzazione Basato su Template Anonymous
Logged Appartenenza a ruoli Basato su Template <loggedintemplate /> <anonymoustemplate /> <rolegroups /> Default.aspx

189

190 Username Time zone Extended Properties Date Format

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

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 web.config

194 Web.config Profilo.aspx name Nome proprietà readOnly Solo lettura ?
Definisce una Proprietà dell’utente Name obbligatorio Defaults System.String Default allowAnonymous = false Attributi Web.config Profilo.aspx 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

195

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 web.config default.aspx

198 ASP.NET SQL Server trigger Products table products 1 z data a
Cache Northwind Database Products table SqlCacheDependency trigger products 1 z Page DataSet N n1 data a ChangeNotification table tableName changeId 3 aspnet_regsqlcache.exe

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 Notification Delivery Service
ASP.NET SQL Server ‘Yukon’ SqlCommand Change Detection Northwind Cache SqlCacheDependency Page DataSet HttpListener IIS Http.sys Notification Delivery Service TCP Port 80

201

202 Ci sentiamo per posta o nei blog
Di tutto Della partecipazione Delle domande  Ci sentiamo per posta o nei blog Ci vediamo alla prossima Magari il 23 marzo a Firenze per ASP.NET Security

203


Scaricare ppt "BENVENUTI."

Presentazioni simili


Annunci Google