240 likes | 337 Views
Udrulning. Publicering af en web-applikation. Eksempel. Lad os publicere Calculator-applikationen: hvad er en web-applikation helt præcis? hvordan eksekveres web-applikationen? hvor er .NET koden?. Publicering fra Visual Studio. Build >> Publish Web Site
E N D
Udrulning • Publicering af en web-applikation
Eksempel • Lad os publicere Calculator-applikationen: • hvad er en web-applikation helt præcis? • hvordan eksekveres web-applikationen? • hvor er .NET koden?
Publicering fra Visual Studio • Build >> Publish Web Site • Man kan publicere direkte til en web-server – eller • man kan publicere til et lokalt filsystem og kopiere filerne selv • Pga. en fejl i VS 2005, så må URL'en ikke hedde det samme som projektet — derfor publiceres applikationen under "http://localhost/WebCalculator"
Hvad sker der rent faktisk? • "code-behind"-koden kompileres til en .NET assembly (.dll)
Hvor findes "code-behind"-koden? • Web-siden indeholder direktiver til den underliggende .dll <%@ page language="C#" autoeventwireup="true" inherits="_Default, App_Web_q0hno7ne" %> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> . . . public partial class _Default : System.Web.UI.Page { protected void cmdAdd_Click(…) { // click event } }
ASP.NET Applikationer • Hvad præcis er en ASP.NET applikation?
ASP.NET Applikationer • En ASP.NET applikation = web-sider + .dll + web.config • Web-siderne indeholder HTML markup • .dll'en indeholder den kompilerede .NET-kode til web-siderne • web.config indeholder konfigurationen (sikkerhed, datakilder, osv.) Web-server ?
Første kald … • Hele applikationen er kompileret! • Alt indhold af .aspx-filerne er om-dannet til klasseerklæringer • klasser er kompileret til en eller flere .dll'er • code-behind .dll skyggekopieres, så originalerne kan opdateres • kald rederigeres nu til kompilerede assemblies • [ kompileringen forklarer tidsforsinkelsen ved første kald til web-siden ] • Fuldstændig kompilering øger ydeevnen • Ift. server-side scripts (fx klassisk ASP, Perl, PHP, …)
Eksempel • Publicér Calculator … • Gå til WebCalculator … Web-server request .dll .dll response
Fra .aspx til klasser • Code-behind => base class, .aspx => derived class publicpartialclass _Default { protected TextBox tbxNumber1; protected TextBox tbxNumber2; protected Button btnAdd; . . . } publicpartialclass_Default : System.Web.UI.Page { voidbtnAdd_Click(object sender, EventArgs e) { int i = int.Parse(txtNumber1.Text); ... } . . . namespace ASP { publicclass Default_aspx : _Default { voidBuildControlTree() { this.AddParsedSubObject("<!DOCTYPE html...>\r\n"); this.AddParsedSubObject( new HtmlHead() ); this.AddParsedSubObject("<body onload=\"Setup()\">\r\n"); this.AddParsedSubObject( new HtmlForm() ); this.AddParsedSubObject("</body>\r\n</html>\r\n"); } . . .
Eksekveringsmodellen • Eksekveringen af ASP.NET applikationer
(1) Eksekveringen begynder … • Eksekveringen begynder ved en klients første kald … Web-server klient-browser hent "page.aspx" Web-side
Side (2) Kompilering og load af Web-applikationen … • Web-applikationen kompileres – om nødvendigt • .dll'erne hentes ind i hukommelsen – om nødvendigt • Side-objekterne instantieres og en serie hændelser inditræffer: • PreInit, …, Load, …, Render, … Web-server ASP.NET .dll .dll CLR
Side (3) Siden sendes tilbage som HTML … • Output fra sidens Render-hændelse sendes tilbage til klienten Web-server ASP.NET .dll response… .dll CLR
Side (4) Næste trin afhænger af klienten … • Klienten forespørger måske på en ny side eller POST'er den samme side tilbage Web-server ASP.NET .dll .dll post-back CLR
Side (5) Post-back … • Ligesom før instantieres side-objektet og HTML'en dannes • Forskelle: • UI-objekter udfyldes med klientens værdier (fx indtastningsfelter) • UI-hændelser eksekveres efter Load men før Render (fx knaptryk) Web-server ASP.NET btnAdd_Click(…) { int i = tbxNumber1.Text; . . . lblResult.Text = ...; } .dll .dll CLR
Observationer • ASP.NET applikationer er kompilerede • ASP.NET applikationer omdannes til HTML • ASP.NET er en "server-side"-teknologi • som standard sker al kodeeksekvering på serveren • Det er ofte nødvendigt at benytte sig af post-back • Sider eksekveres forskelligt, alt efter om det er første kald eller post-back • det er vigtigt at holde sig for øje, når man programmerer … protected void Page_Load(object sender, EventArgs e) { if (this.IsPostBack) // Drop initialiseringen return; else this.lblDirectory.Text = GetSourceDir(); }
IIS • IIS – Microsofts Web-server
Internet Information Services (IIS) • IIS er Microsofts kommercielle web-server • leveres sammen med XP Pro, Windows 2000/2003 og Vista • installeres via kontrolpanelet: Tilføj/Fjern Programmer • ASP.NET er et IIS plug-in • installeres, når Visual Studio eller .NET installeres • kører uden for IIS af sikkerhedshensyn ASP.NET worker process (ASPNET_WP.EXE) .NET CLR http://server/page.aspx IIS (inetinfo.exe) ASP.NET ISAPI Extension Manager ASPNET_ISAPI.DLL ASP.NET ISAPI extension HTTP Request
Side Calculator-applikationen i IIS'en • Alting hentes ind i "worker"-processen … • .NET danner en AppDomain (sikkerhedsgrænse) til at indeholde applikationen • ved første kald henter ASP.NET dll'erne ASPNET_WP.EXE .NET CLR AppDomain ASP.NET App.dll
T3 T2 T1 Page Page Page IIS'en er trådet • .NET CLR er trådet for at kunne håndtere flere klienter • En side-forespørgsel tilordnes en tråd fra CLR'ens thread pool • Konsekvenser? ASP.NET applikationer er trådede ASPNET_WP.EXE .NET CLR http://server/Calculator/Default.aspx AppDomain http://server/Calculator/Default.aspx ASP.NET . . . http://server/Calculator/Default.aspx
Konfiguration af IIS'en • IIS er konfigureret automatisk via Visual Studio 2005 • Hvis man selv vil konfigurere IIS'en: • Kontrolpanel, Administration, Internet Information Services
Hvad så? • Øvelse #2
<blank> • …