Tilstandsstyring/Otto Knudsen 1 Tilstandsstyring Motivation ViewState EventTarget, EventArgument.

Slides:



Advertisements
Lignende præsentationer
SPBG.  Test driven development  Unit test frameworks  MOSS TDD  Mocking  Design patterns.
Advertisements

Velkommen til Softwarekonstruktion
Aktivering af link til passwordliste i SFX Anders Vestergaard, DBC, 19. februar 2013 OBS: Inden passwordliste aktiveres i SFX skal liste være oprettet.
Masterpages/Otto Knudsen 1 Master Pages  Master Pages i ASP.NET 2.0.
Når en applikation går i fejl… … er det interessant, at vide noget om: Hvornår gik applikationen i fejl Hvilken applikation gik i fejl Hvad er fejlen.
Februar 2005Sprog-nyheder i C# og VB1 Captator Tlf: Henrik Lykke Nielsen Softwarearkitekt, Microsoft Regional Director for Denmark.
Microsoft Windows.NET Compact Framework Niels Hilmar Madsen Developer & Platform Strategy Group Microsoft Danmark.
C#: Data Typer. Indhold: “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different languages, to.
Sikkerhed/Otto Knudsen 1 Diagnostics  Debug af web-applikationer.
Distribueret programmering, specielt Web Services Rasmus D. Lehrmann DM
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
Array og ArrayList Et slideshow. Som er sødt.. Hvordan virker ArrayList?  ArrayList NAVN = new ArrayList ();  NAVN.add(”Værdi”);  NAVN.add(index, ”værdi”)
1 JavaServer Faces Copyright © Lund & Bendsen Dynamikken i JSF.
C#: Udtryk og metoder. Indhold “With regards to programming statements and methods, C# offers what you would come to expect from a modern OOPL…” Udtryk.
Datastrukturer og Collections Oversigt og forskel imellem Jave og.net Collections library Collection interfaces ArrayList IList interface Hashtable Hashtable.
06 – Java Packages Packages og ClassPath. 2 NOEA2009Java-kursus – Packages og class path Hvad er Packages? En package er en gruppering af relaterede typer.
Item gennemgang  Item: 01 – Static factory methods  Item: 09 – Override hashCode  Item: 17 – Design & document inheritence  Item: 25 – Lists over arrays.
Distribueret programmering, specielt.NET Remoting Rasmus D. Lehrmann DM
1 Parsing. 2 Mål: Et program til indlæsning og beregning af aritmetiske udtryk Eksempel: Beregn (3*5 + 4/2) - 1 Løs et lettere problem først: Læs en streng.
View Procedures Trigger og Function Jesper Tørresø DAB1 E07 1. november 2007.
CodeIgniter Database Brugerinput Form Validation 20101JFH.
Udvikling med Microsoft 2007 Office System Michell Cronberg Microsoft MVP, MCT, MCAD ISV Innovation Day 2006 ServerServer.
Objekter og klasser Applikationsdesign Code Namespace Value og reference typer Reference type Rasmus D. Lehrmann1.
FEN Databaser/DBAdgang21 DB-adgang - Connectionless Connectionless DataAdapter DataSet.
WCF service Hostet på website x. Opret tomt web applikations projekt.
ASP.NET Cache, State DataGrid og Diagnostics. Agenda – ASP.NET Cache, State og Cookies ( 1 del ) –Cache –Static member –Application State –Session State.
Introduktion til.NET- platformen og version 2.0 Michell Cronberg Microsoft MVP
Masterpages/Otto Knudsen 1 Master Pages Master Pages i ASP.NET 2.0.
Eksekvering/Otto Knudsen 1 Udrulning Publicering af en web-applikation.
Introduktion/Otto Knudsen 1 Overblik WebForms ASP.NET.
Opslagsfelter (Access, del 6). RHS – Informationsteknologi 2 Udgangspunkt Vi er ofte i den situation, at valg af en type for et felt ikke begrænser vores.
Distribution af funktionalitet Webservice med WCF x.
Webserveren kan afvikle flere applikationer, der hver har deres eget selvstændige ”liv” og hukommelse. Den enkelte applikation består typisk af flere elementer.
Distribution af funktionalitet Webservice med WCF x.
Hvorfor trådning? Performance Responsivness. Succeskriterier Forbedring af performance –Opgaverne skal være uafhængige –Jo flere afhængige opgaver, jo.
Web service - elementer SOAP (Simple Object Access Protocol) WSDL (Web Service Description language) UDDI (Universal Description, Discovery and Integration)
Web service - elementer SOAP (Simple Object Access Protocol) WSDL (Web Service Description language) UDDI (Universal Description, Discovery and Integration)
ASP.NET Custom Web Controls Deployment. Agenda – ASP.NET Web User Controls Composite Control Rendered Custom Control Deploy en Web Applikation.
Programering af mobile enheder Windows Phone Storage.
Intro Projekttyper v/ Lise Louv, Uddannelsesafdelingen Siden sidst: evaluering på opgaver og virtuel kursus. Kursets ugeforløb læse – forelæsning – øvelsestime.
Begreber og Redskaber 9. Plan for idag I dag: Datastrukturer Tabeller Lister, mængder, maps, grafer Hægtede lister.
18 – Java Server Faces. 2 NOEA2009Java-kursus – JSF 2 Web-applikationer - 1 Brugere interagerer med en Web-browser Browseren sender forespørgsler til.
N-lags design/Otto Knudsen 1 N-lags Design Definition Motivation.
14. Web-baserede Apps i.NET. 2 NOEA2009C#-kursus Objectives “Real-world applications are typically multi-tier, distributed designs involving many components.
Session Når man hoster en WCF Service på ASP.NET website, kan man bruge ASP.NET’s Session.
Gruppe sort Morten, Peter, Jesper, Spencer & Støving.
Begreber og Redskaber 5. Collections i Java 1.2 Framework: samling af datastrukturer og algoritmer som generelt værktøj. En ramme til at arbejde med søgning.
1 HMAK XMLRelationel model og XMLNOEA / PQC 2005 SQLServer og XML Hent data via URL Generering af xml –Raw –Auto –Explicit Hent data via template Evt.
Begreber og Redskaber 5. Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om.
Rohde & Schwarz - WPF Det bedste siden skiveskåret brød? v/Magnus Toftdal Lund.
1 XMLRelationel model og XMLNOEA / FEN 2007 Relationelle databaser og XML Overblik. –For detaljer se PQC: sqlOgXml.ppt og SqlServerOgXml.ppt RDB-struktur.
AJAX/Otto Knudsen 1 AJAX Motivation Definition. AJAX/Otto Knudsen 2 Motivation En typisk web-applikation er synkron klienten sender en forespørgsel og.
Program Design – 4 Introduktion til PHP. Dagens lektion Hvad er PHP?  - og lidt historie Hvordan virker PHP? Grundlæggende PHP  Variable  Typer  Løkker.
Fundamentale datastrukturer
Webserveren kan afvikle flere applikationer, der hver har deres eget selvstændige ”liv” og hukommelse. Den enkelte applikation består typisk af flere elementer.
Masterpages/Otto Knudsen 1 Navigation på webstedet Kontroller til navigation mellem siderne på webstedet.
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
Internetteknologi (ITNET2) Kort teknisk ASP.NET introduktion Mandag den 19/ Jesper Tørresø.
Fremstilling af Simple WEB steder [ITPL] Foråret 2004
Webserveren kan afvikle flere applikationer, der hver har deres eget selvstændige ”liv” og hukommelse. Den enkelte applikation består typisk af flere elementer.
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
ASP.NET – web site publish. ASP.NET – site-version.
Intro Evaluering De sidste to gange?. HTTP, cookies og sessions Forelæsning nr 10 Tilbage til trafikken mellem server – client Sende HTTP-request og respons.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
WebApi service part 2 Routning og Action Simpel test-client (javascript) Session og Application data.
WebApi service x.
Simpel test-client (javascript) Session og Application data
Præsentationens transcript:

Tilstandsstyring/Otto Knudsen 1 Tilstandsstyring Motivation ViewState EventTarget, EventArgument

Tilstandsstyring/Otto Knudsen 2 Motivation Normalt er internettet et tilstandsløst (stateless) miljø … I kontrolbaserede modeller skal tilstande overføres i forbindelse med hver post-back Mange HTML-elementer medsender ingen værdier i en POST table, span, div, p, li, osv. Hvis en kontrols værdi sættes på serveren og efterfølgende returneres til klienten, hvordan sendes denne værdi så tilbage igen ved post-back? Hvis klienten ændrer/trigger i en kontrol, hvordan håndteres ændringen/hændeslen så ved post-back?

Tilstandsstyring/Otto Knudsen 3 Betragt en tilstandsløs version af applikationen what happened? list box was filled on server returned to client, client selected an item, triggered post-back on post-back, list box is empty and selected item is forgotten! Eksempel "markér"

Tilstandsstyring/Otto Knudsen 4 Løsning — ViewState ASP.NET anvender et skjult element: __ViewState elementet genereres sammen med hver side indeholder en base64-krypteret streng med supplerende tilstandsinformationer

Tilstandsstyring/Otto Knudsen 5 Kontrol af ViewState Kan sættes på hver kontrol Er som standard sat, så kontroller opfører sig forventeligt Hvordan slås ViewState fra? sæt kontrollens EnableViewState –egenskab til falsk sæt side-attributen, så ViewState slås fra for alle kontroller på siden hvorfor slå ViewState fra? Komplekse kontroller, som fx grids kan indeholde store datamængder, som skal overføres hver gang siden genlæses …

Tilstandsstyring/Otto Knudsen 6 Indlæsning af ViewState Kontroller genlæses automatisk vha. ViewState, når side-objektet dannes Før Page_Load-hændelsen PreInit Themes initialized, master pages applied, control skins applied Init InitComplete CreateChildControls (if IsPostBack) Control/View state loaded (if IsPostBack) PreLoad Load Page lifecycle

Tilstandsstyring/Otto Knudsen 7 Brug af ViewState ViewState kan også anvendes til at gemme klient-/applikations-tilstand Side-objektet tilbyder ViewState -egenskaben (key/value-par) data bevares ved post-backs til den samme side public partial class ShoppingPage : System.Web.UI.Page { private ArrayList cart; protected void Page_Load(object sender, EventArgs e) { // Indlæs aktuel kurv fra State: cart = (ArrayList) this.ViewState["Cart"]; if (cart == null) // Første kald – skab ny kurv: cart = new ArrayList(); }.. // Andre metoder. public partial class ShoppingPage : System.Web.UI.Page { private ArrayList cart; protected void Page_Load(object sender, EventArgs e) { // Indlæs aktuel kurv fra State: cart = (ArrayList) this.ViewState["Cart"]; if (cart == null) // Første kald – skab ny kurv: cart = new ArrayList(); }.. // Andre metoder.

Tilstandsstyring/Otto Knudsen 8 Hændelseshåndtering Yderligere skjulte felter anvendes til hændelseshåndtering __EventTarget indeholder hændelseskildens id __EventArgument indeholder parameterværdier til hændelsen

Tilstandsstyring/Otto Knudsen 9 Tilstandsstyring Session state Application state Caching

Tilstandsstyring/Otto Knudsen 10 Motivation Applikationer håndterer forskellige slags data Kunder, produkter, ordrer, personer, … Collections DataSets DataTables XML-dokumenter I internet-verdenen håndteres data på serversiden Er vi nødsaget til at genskabe/genindlæse hver gang eller kan vi bevare tilstanden etellerandet sted?

Tilstandsstyring/Otto Knudsen 11 Eksempel I Census Data applikationen indlæses census.txt igen og igen ved første kald og igen ved hvert post-back … protected void Page_Load(object sender, EventArgs e) { // Find den rigtige sti, uanset applikationens placering: string filename = Path.Combine( System.AppDomain.CurrentDomain.BaseDirectory, Path.Combine("App_Data", "census.txt")); namesCollection = Program.ReadCensusData(filename); protected void Page_Load(object sender, EventArgs e) { // Find den rigtige sti, uanset applikationens placering: string filename = Path.Combine( System.AppDomain.CurrentDomain.BaseDirectory, Path.Combine("App_Data", "census.txt")); namesCollection = Program.ReadCensusData(filename);

Tilstandsstyring/Otto Knudsen 12 Løsning Vi kunne anvende ViewState – meromkostning ved nettrafik data sendes frem og tilbage (langsomt) ASP.NET tilbyder bedre server-side alternativer: Session state :individuel tilstand bevares pr. klient i hele sessionens livstid Application state :global tilstand bevares i hele applikationens livstid Cache state :global tilstand, (fortrinsvis read-only data) bevares i et tidsrum bestemt af ASP.NET

Tilstandsstyring/Otto Knudsen 13 Eksempel Lad os optimere Census Data applikationen ved at cache namesCollection samlingen på serveren vi anvender Cache, da data er statisk og globalt … private List namesCollection; protected void Page_Load(object sender, EventArgs e) { namesCollection = this.Cache["namesCollection"]; if (namesCollection == null) { // Første kald til siden // Find stien, uanset applikationens placering: string filename = Path.Combine( System.AppDomain.CurrentDomain.BaseDirectory, Path.Combine("App_Data", "census.txt")); namesCollection = Program.ReadCensusData(filename); this.Cache["namesCollection"] = namesCollection; } private List namesCollection; protected void Page_Load(object sender, EventArgs e) { namesCollection = this.Cache["namesCollection"]; if (namesCollection == null) { // Første kald til siden // Find stien, uanset applikationens placering: string filename = Path.Combine( System.AppDomain.CurrentDomain.BaseDirectory, Path.Combine("App_Data", "census.txt")); namesCollection = Program.ReadCensusData(filename); this.Cache["namesCollection"] = namesCollection; }

Tilstandsstyring/Otto Knudsen 14 Faldgruber — Application State Voldsom brug af Application State hæmmer skalérbarheden Opdateringer af Application State kræver lås (Lock/Unlock) Ihukom, at web-applikationer er trådede Application State repræsenterer en potentiel kritisk sektion Application State er typisk read-only for at undgå dette this.Application.Lock(); if (this.Application["visits"] == null) this.Application["visits"] = 0; else this.Application["visits"] = 1 + (int) this.Application["visits"]; this.Application.UnLock(); System.Diagnostics.Debug.WriteLine( this.Application["visits"] ); this.Application.Lock(); if (this.Application["visits"] == null) this.Application["visits"] = 0; else this.Application["visits"] = 1 + (int) this.Application["visits"]; this.Application.UnLock(); System.Diagnostics.Debug.WriteLine( this.Application["visits"] );

Tilstandsstyring/Otto Knudsen 15 Faldgruber — Session State Session state anvendes til styring af klient-tilstand indkøbskurve, fakturaer, persondata … Dette virker kun, hvis hver klient entydigt kan identificeres hertil anvendes cookies; men disse kan slås fra Session State virker i ASP.NET uanset om cookies er slået fra eller ej, blot følgende angives: web.config "AutoDetect" anvender cookies, hvis det er muligt

Tilstandsstyring/Otto Knudsen Flersidede Sites Teknikker til flersidede applikationer

Tilstandsstyring/Otto Knudsen 17 Motivation De fleste hjemmesider består af flere sider Hvordan bevæger vi også fra side til side?

Tilstandsstyring/Otto Knudsen 18 Gå til anden side … To forskellige tilgange: Response.Redirect(url); Server.Transfer(page); Response.Redirect(url) url kan være lokal eller en fuldt kvalificeret URL: " returnerer til klienten og beder browseren redirigere til den givne URL Server.Transfer(page) siden skal være lokal, i den samme eller i en anden ASP.NET applikation mere effektiv end Response.Redirect ; men begrænset til lokale sider

Tilstandsstyring/Otto Knudsen 19 Eksempel Når en bruger klikker på login-knappen, tjekkes password, og brugeren viderestilles, hvis ok … hvordan overføres data mellem siderne? i dette tilfælde anvendes Context State… protected void btnLogin_Click(object sender, EventArgs e) { DataTier.DataAccess data; long id; string pwd; if (!this.IsValid) return; id = long.Parse(this.txtStudentID.Text); pwd = this.txtPassword.Text; data = new DataTier.DataAccess("Students.mdb"); if (data.passwordMatch(id, pwd)) { this.Context.Items["ID"] = id; this.Context.Items["DataAccess"] = data; this.Server.Transfer("StudentInfo.aspx", true /* bevar tilstand*/); } else this.lblErrorMsg.Text = "Incorrect id or password..."; } protected void btnLogin_Click(object sender, EventArgs e) { DataTier.DataAccess data; long id; string pwd; if (!this.IsValid) return; id = long.Parse(this.txtStudentID.Text); pwd = this.txtPassword.Text; data = new DataTier.DataAccess("Students.mdb"); if (data.passwordMatch(id, pwd)) { this.Context.Items["ID"] = id; this.Context.Items["DataAccess"] = data; this.Server.Transfer("StudentInfo.aspx", true /* bevar tilstand*/); } else this.lblErrorMsg.Text = "Incorrect id or password..."; }

Tilstandsstyring/Otto Knudsen 20 Destinationssiden Destinationssiden udtrækker simpelthen data fra Context … protected void btnLogout_Click(object sender, EventArgs e) { this.Server.Transfer("Login.aspx", false /* nulstil tilstand */); } protected void btnLogout_Click(object sender, EventArgs e) { this.Server.Transfer("Login.aspx", false /* nulstil tilstand */); } protected void Page_Load(object sender, EventArgs e) { // Er brugeren kommet direkte hertil? object obj = this.Context.Items["ID"]; if (obj == null) this.Response.Redirect("Login.aspx", true /* afslut nu */); long id; DataTier.DataAccess data; id = System.Convert.ToInt64(obj); data = (DataTier.DataAccess) this.Context.Items["DataAccess"]; this.DataGrid1.DataSource = data.GetStudent(id); this.DataGrid1.DataBind(); } protected void Page_Load(object sender, EventArgs e) { // Er brugeren kommet direkte hertil? object obj = this.Context.Items["ID"]; if (obj == null) this.Response.Redirect("Login.aspx", true /* afslut nu */); long id; DataTier.DataAccess data; id = System.Convert.ToInt64(obj); data = (DataTier.DataAccess) this.Context.Items["DataAccess"]; this.DataGrid1.DataSource = data.GetStudent(id); this.DataGrid1.DataBind(); }

Tilstandsstyring/Otto Knudsen 21 Overførsel af data mellem sider Der er flere mulige teknikker … Tilføj en QueryString til URL'en og brug Response.Redirect data begrænser sig til URL-kompatible strenge Gem data midlertidigt i Context state og brug Server.Transfer virker fint, hvis data ikke skal bevares over længere tidsrum Gem data i Session State God løsning, hvis data skal gemmes over længere tidsrum Virker med begge redirigeringsmetoder Context.Items["data"] =...;

Tilstandsstyring/Otto Knudsen 22 Hvad så? Øvelse #4

Tilstandsstyring/Otto Knudsen 23 …