You are on page 1of 22

Sisteme Distribuite Introducere in aplicatii ASP.

NET

Lucrarea de laborator nr. 9

Aplicatiile ASP.NET 2.0 (1) - Introducere

Abstract

In cadrul acestui laborator se vor trece in revista aspecte


introductive legate de aplicatiile web in ASP.NET 2.0. Aplicatiile web
bazate pe ASP.NET constitue un domeniu destul de vast in cadrul .NET
Framework iar stapanirea tehnologiei necesita o cunoastere avansata a
instrumentelor si librariei de clase. Pentru laboratorul de fata se vor
studia urmatoarele aspecte:
• Modelul aplicatiilor ASP.NET
• Noutati in ASP.NET 2.0
• Internet Information Services (IIS)
• Instalarea aplicatiilor Web
• Structura unei aplicatii ASP.NET
• Web Forms
• Obiecte ASP.NET

Introducere in ASP.NET

ASP.NET ofera un model de programare si o infrastructura prin


intermediul carora se pot dezvolta atat aplicatii web cat si servicii web.
Principalele caracteristici ale ASP.NET sunt urmatoarele:
Aplicatiile ASP.NET sunt compilate. Unul din dezavantajele ASP 1 -ul
clasic il constituia faptul ca pagina web continea scripturi, cod ce trebuia
interpretat si apoi executat; cu ASP.NET codul, folosind metode de
cache, este deja compilat si gata pentru executie; aplicatiile ASP.NET
sunt compilate in doua faze: prima faza in care codul C# sau VB.NET (si
altele) este compilat intr-un assembly ce contine cod intermediary IL
(acesta compilare poate avea loc in momentul primei cereri sau sursele
pot fi deja compilate) si a doua realizata de JIT chiar inaintea executie
executiei propriu-zise a paginii si consta in tranformarea codului IL in
cod nativ optimizat pentru sistemul pe care se afla serverul web; o
aplicatie web nu este compilata de fiecare data cand o pagina sau un
serviciu web este cerut, in schimb de foloseste un o metoda de pastrare
(cache) a codului deja compilat (JIT); codul IL este recompilat de fiecare
data cand sursele sunt modificate;

1
ASP este acronimul pentru Active Server Pages; ASP.NET reprezinta noua platforma de
programare a aplicatiilor web ce foloseste .NET Framework.
1
Sisteme Distribuite Introducere in aplicatii ASP.NET

ASP.NET este multi-limbaj.Se pot alege orice limbaj pentru a


dezvolta o aplicatie web; asta pentru ca rezultatul compilarii va fi cod IL
adica un cod scris pentru .NET si poate rula in interiorul unui mediului
protejat oferit de CLR;
O aplicatie ASP.NET foloseste mediul de executie oferit ce CLR. Acest
lucru implica:
• Managementul automat al memoriei;
• Siguranta tipurilor: cand se compileaza o aplicatie in assembly-ul
construit se adauga informatii detaliate despre clasele
folosite(metode ,date, localizare etc.) astfel incat apelul unor,de
exemplu al unor metode, sa nu necesite informatii suplimentare
decat acelea oferite in metadata;
• Multi-threading: o aplicatie web poate necesita mai multe fire de
executie; thread-urile pot fi folosite pentru a: executa operatii
asincrone (citirea unui fisier, apelul unui serviciu web) sau pentru
a executa o operatie in mod continuu pe durata de viata a
aplicatiei web (de exemplu un un fir cu prioritate scazuta care
trebuie sa salveze date la intervale regulate);
ASP.NET este orientat obiect. Se poate folosi orice clasa pusa la
dispozitie de .NET Framework si se poate utiliza orice principiu OOP
pentru care exista suport. Cel mai bun exemplu este acela al
controalelor server-side:controalele pot fi create si modificate
programatic astfel incat sa raspunda intr-un anumit fel la evenimente
sau sa aiba un anumit aspect;
Aplicatiile ASP.NET sunt usor de instalat si configurat. De cele mai
multe instalarea unei aplicatii ASP.NET inseamna doar copierea fisierelor
aplicatiei intr-o pe disc unde este mapat un director virtual al IIS.
Configurarea este la fel de simpla : fiecare aplicatie contine un fisier in
format XML web.config in care sunt tinute setarile; poate fi modificat in
timpul rulari aplicatiei iar aplicarea lor se face automat;

Noutati in ASP.NET 2.0

Noutatile aduse de ASP.NET 2.0 pot fi in urmatoarele categorii:


™ Administrarea si dezvoltarea aplicatiilor web
™ Design-ul paginii
™ Controale server-side noi
™ Legarea datelor in controale web
™ Securitate

Pentru administrarea aplicatiilor Web .NET Framework include o


consola de management ce are o interfata Web ce poate fi accesata de
oriunde printr-un browser.
La dezvoltarea propriu-zisa a site-ului web ASP.NET 2.0 recunoaste
unele nume de directoare (din directorul radacina al aplicatiei) ce sunt

2
Sisteme Distribuite Introducere in aplicatii ASP.NET

destinate pastrarii unor anumite tipuri de fisiere(de exemplu App_Data


este destinat pastrarii fisierelor de date xml sau mdf si pentru pastrarea
bazei de date ce contine informatiile despre membership si roluri,
App_Code este destinat pentru colectarea fisierelor de cod iar clasele
aflate in aceste fisiere sunt referentiate automat in aplicatie,
App_Themes este locul in care pot fi plasate imagini, skin-uri si css-uri).
Incepand cu ASP.NET 2.0 site-urile web pot fi precompilate inainte
de a fi instalate pe serverul de productie.
Avantajele precompilarii sunt:
• se imbunatateste timpul de raspuns pentru prima cerere a paginii
intrucat aceasta nu mai este compilata dinamic;
• posibilitatea de a instala numai codul executabil fara codul sursa;

Tot cu ASP.NET 2.0 se pot crea design-uri consistente se pagini


folosind master pages. Paginile master constitue tema sau designul
general ales pentru un grup de pagini web; acest lucru este util intrucat
paginile nu mai sunt construite de la zero ci avand un sablon iar fiecare
pagina reprezentand o particularizare acestuia.
Pentru a face lucrurile mai interesante ASP.NET aduce o noua
modalitate de configurare dinamica a paginii web chiar de catre client.
Acest lucru este posibil prin Web Parts iar aplicatiile web ce pot beneficia
de asemenea controale sunt portaluri intrucat ofera suport pentru
actiunile obisnuite de pe aceste tipuri de site-uri: drag-and-drop,
vizualizari configurabile, etc..
ASP.NET 2.0 introduce noi controale server-side cum ar fi:
TreeView, SiteMapPath (un control utilizat la navigarea prin site-ul web),
FileUpload , ImageMap, etc. .Toate codul markup generat pentru un
control este compatibil cu XHTML 1.1 si este adaptive in functie de tipul
si posibilitatile browserului. Controalele suporta skin-uri si pot fi legate
la o sursa de date 2 .
Cu noul model de legare a unui data source se poate defini
modul in care pagina web interactioneaza cu aceasta in mod declarativ;
acest lucru e mult mai usor decat scrierea unui cod behinde care sa faca
efectiv legatura.
Desi autentificarea din ASP.NET 1.x bazata pe cockie-uri este
inca solutia cea mai la indemana pentru securizarea unui site web, codul
ce realizeaza autentificarea si autorizarea trebuia rescris. In ASP.NET
2.0 s-a introdus suport pentru pastrarea credentialelor si a rolurilor 3
utilizatorilor.

2
Data source binding
3
Membership

3
Sisteme Distribuite Introducere in aplicatii ASP.NET

Internet Information Services (IIS)

Internet Information Services reprezinta un set de servicii


Windows responsabile cu procesarea cererilor venite din retea pe un
anumit port. In acest sens exista un serviciu Windows numit World Wide
Web Publishing Service 4 ce asculta de obicei pe portul 80 5 (destinat
comunicatiilor prin HTTP) sau 443 (HTTPS) cereri HTTP pentru un
anumit site Web. Acest serviciu Windows este administrat de IIS
Manager.

Obs:Pentru a deschide consola de management a IIS trebuie rulat un


program numit inetmgr.exe ce poate fi gasit in directorul de instalare
a IIS. Cea mai simpla cale de a deschide consola este prin utilitarul
Run din Windows.

In cadrul IIS site-urile sunt grupate in directoare virtuale care


sunt mapate catre directoare existente pe disc in care se afla aplicatiile
web.
Aplicatiile Web sunt accesate de client prin intermediul unui
browser caruia ii precizam un URL; acesta adresa contine mai multe
informatii ce vor indica: tipul protocolului, portul pe care se afla mapata
aplicatia web pe server , locatia virtuala a resursei si cel mai important
numele resursei sau al fisierului.De exemplu daca avem URL-ul urmator:

http://localhost:8080/AppWeb/index.aspx

Se poate observa ca protocolul este HTTP, se face o cerere catre


un server cu aliasul localhost (intern acesta este mapat catre adresa de
loopback 127.0.0.1), portul 8080,directorul virtual AppWeb iar resursa
din cadrul acestuia este index.aspx. Extensia aspx este foarte
importanta pentru server intrucat procesarea depinde de tipul ei. Fiecare
extensie de fisier are mapata in cadrul IIS unei extensii ISAPI 6 ;aceasta
extensie este reprezentata fizic de un DLL, de exemplu extensia pentru
fisierele din ASP clasic (*.asp) este asp.dll iar pentru fiesierele ASP.NET
(*.aspx si *.asmx ) este aspnet_isapi.dll. Extensii precum *.aspx sau
*.asmx sunt preluate de extensia aspnet_isapi.dll si apoi date spre
procesare mediului ASP.NET.
Trebuie mentionat ca inainte de a trimite mai departe cererea,
IIS face cateva preprocesari cum ar fi verificarea drepturilor de acces

4
Visual Studio 2005 are integrat un server web, Web Developer Web Sever ce poate rula
independent de IIS; Visual Studio poate fi configurat sa foloseasca acest server in loc de IIS
5
Pentru un site Web se poate configura mai multe porturi insa implicit cererile sunt
ascultate pe portul 80
6
Internet Service Application Program Intreface
4
Sisteme Distribuite Introducere in aplicatii ASP.NET

pentru resursa respectiva sau autentificarea utilizatorilor. De acceea


resursele aplicatiei trebuie configurate in cadrul IIS cu access anonim si
public.

Obs:Intrucat fiecare versiune de ASP.NET vine cu propriul ISAPI IIS


trebuie configurat astfel incat sa stie pentru fiecare aplicatie in parte
carei interfete sa trimita cererea. Pentru acest lucru fiecare versiune
de ASP.NET vine cu un utilitar de configurare aspnet_regiis.exe.
Utilizarile cele mai frecvente sunt:
1.afisarea versiunilor de asp.net instalate
aspnet_regiis.exe –lv
2.configurarea unei singure aplicatii
aspnet_regiis.exe –s W3SVC/1/ROOT/AppWeb
3.configurare tuturor aplicatiilor existente in IIS:
aspnet_regiis.exe –i

O data cererea ajunsa la extensia ISAPI pentru ASP.NET


procesarea efectiva a cererii este realizata de mediul .NET. Mai precis
cererea este data unui proces separat ce reprezinta mediul in care
ruleaza ASP.NET (sau .NET runtime host) 7 . Acest proces difera in functie
de versiunea de IIS folosita. Pentru IIS 5.x acest proces se numeste
aspnet_wp.exe iar pentru IIS 6.0 W3WP.exe.
In cadrul versiuni 5.x, aplicatiile ruleaza in contextul unui singur
proces insa separate prin domenii ale aplicatiei;fiecare aplicatie ASP.NET
ruleaza intr-un domeniu separat astfel incat erorile dintr-o aplicatie sa
nu afecteze si celelalte aplicatii web. Acest model ridica doua probleme:
daca o aplicatie web ce ruleaza direct pe serverul web (de exemplu o
aplicatie ASP clasica) si genereaza erori ce duc la inchiderea lui
aplicatiile ASP.NET vor fi inchise si ele; pentru aplicatiile ASP.NET nu
este cazul intrucat sunt executate in domenii diferite si izolate. Pentru a
rezolva aceasta problema se poate configura, pentru fiecare aplicatie in
parte, nivelul de protectie; pentru nivelul cel mai mare aplicatie va rula
pe un proces separat , mai precis in dllhost.exe. A doua problema este
ridicata de performanta: trebuie schimbate contextele a doua procese
(cel al serviciului windows si cel al procesului lucrator in care este
executat CLR).
Problema schombarii contextului in varianta 6.0 este rezolvata
prin includerea unui driver in kernelul Windows (HTTP.SYS) ce este
resposabil cu receptionarea cererilor de la clienti si trimiterea lor directa
catre orice proces ce este inregistrat pentru anumite URL-uri. Aplicatiile
web sunt grupate in application pools iar pentru fiecare grup ruleaza in
cadrul unei instante separate procesului lucrator W3WP.exe. Acest

7
Trebuie reamintit ca aplicatiile .NET ruleaza in cadrul unor procese Windows; aceste
procese sunt instante ale unor programe ce contin cod nativ (nu managed) .
5
Sisteme Distribuite Introducere in aplicatii ASP.NET

model are dezavantajul ca foloseste mai multe instante ale CLR-ului


ceea ce consuma in plus memorie.

Instalarea aplicatiilor Web (deployment)

De obicei instalarea aplicatiilor ASP.NET inseamna copierea


fisierelor ce compun aplicatia intr-un director pentru care IIS mentine o
referinta sub forma unui director virtual si modificarea fisierelor de
configurare pentru asigurarea functionalitatii. Pentru majoritatea
aplicatiilor cei doi pasi sunt suficienti insa daca aplicatia foloseste
resurse externe sau trebuie sa acceseze baze de date trebuie facute
cateva operatii suplimentare. De regula trebuie efectuati urmatorii pasi:
ƒ Copierea tuturor fisierelor necesare pentru compunerea aplicatiei
web;daca se folosesc assembly-uri ce sunt accesate prin GAC
acestea trebuie instalate prin utilitarul gacutil.exe.
• Daca aplicatia foloseste baze de date serverul de baze trebuie
configurat atat cu baza de date si tabelele folosite cat si cu un cont
de de utilizator prin care procesul lucrator sa se poate conecta la
server; in cazul SQL Server trebuie avut grija daca se foloseste
autentificarea integrata din Windows sau autenfificarea pe server
pentru accesul la baza de date; solutia preferata este ultima intrucat
serverul se poate afla pe alta masina iar autentificarea prin Windows
nu se mai poate realize; un alt aspect ce trebuie tinut cont cand se
folosesc servere de baze de date aflate in retea este configurarea
firewall-ului de pe acea masina sa accepte conexiuni la baza de date.
ƒ Maparea directorului fizic de pe disc cu un director virtual creat in
IIS.

Obs:Crearea unui director implica urmatorii pasi:


1. in consola de management IIS se dechide meniul contextual
pe un nod din treeview-ul sau cel aflat sub meniul Action al
ferestrei si se alege optiunea New si apoi Virtual Directory;
2. se aleg optiunile pentru noul director virtual:cale fizica pe disc
si drepturile de acces ( listarea directorului,citire, scriere );

6
Sisteme Distribuite Introducere in aplicatii ASP.NET

• Setarea permisiunilor pentru contului utilizatorului procesului


lucrator ASP.NET. Utilizatorul Windows ce instantiaza procesul
lucrator trebuie sa aiba drepturi de acces la toate resursele pe care
le foloseste aplicatia web; setarea drepturilor se face din consola
Computer Management.
• Setarea permisiunilor de acces la resursele aplicatiei (pagini, cod,
fisere de imagine);trebuie retinut ca in momentul in care expunem
directorul aplicatiei pentru acces din afara expunem toate fisierele si
directoarele din el; este important sa setam dreptul pentru fiecare
fisier si director in parte; cea mai des intalnita greseala este aceea
de setare a dreptului de listare pentru directorul aplicatiei, in acest
fel toate fisierele sunt expuse pentru copiere, inclusiv cele sursa si
cele de interfata (*.aspx); trebuie avut insa grija intrucat anumite
directoare si fisiere trebuie lasate pentru acces public(de exemplu
fisierele css, imaginile ce compun o pagina web, etc..);
• Modificarea fisierului web.config pentru mediul de lucru al
aplicatiei;de regula inseamna modificarea optiunilor de
globalizare,autorizare, session state sau setarile de acces la baza de
date ce se gasesc in fisierul configurare.
• Setarea parametrilor din fisierul de configurare machine.config; unul
din motive ar fi in cazul unuei ferme de servere web in care din
motive echilibrare a incarcarii aceeasi aplicatie web este instalata pe
mai multe servere;pentru a sigura consistenta cererilor ce necesita
autentificare serverele trebuie sa aiba aceeasi cheie de criptarea;

Anatomia unei aplicatii ASP.NET

Aplicatiile ASP.NET sunt grupate in cadrul IIS in directoare


virtuale; in acest fel directoare fizice sunt expuse de catre serverul web
pentru accesul din afara. In componenta directorului aplicatiei pot intra
mai multe fisiere si directoare. O aplicatie web poate fi compuna din
urmatoarele ingrediente:
™ Pagini Web: Reprezentate de fierele cu extensia *.aspx si definesc
interfata web a aplicatiei;
™ Servicii Web: Module ce ofera functii utile aplicatiilor(nu numai web)
aflate pe alte calculatoare si pe diferite platforme; aceste module
sunt reprezentate de fisiere cu extensia *.asmx;
™ Fisiere de cod: De obicei o pagina web este insotita de un fisier de
cod ce contine logica aplicatiei pentru pagina respective; in functie
de modul de separare a codului de interfata pot exista mai multe
fisiere sursa;de obicei numele fisierului sursa este dat de cel al
paginii web prefixat de extensia tipului de cod sursa (.cs , .vb);de
exemplu pentru pagina default.aspx avem fisierul sursa (C#)
default.aspx.cs; fisierul sursa poate fi schimbat prin setarea

7
Sisteme Distribuite Introducere in aplicatii ASP.NET

atributului CodeFile din elemental-directiva @Page, element aflat in


antetul unei pagini ASP.NET;
™ Un fisier de configurare numit web.config in care sunt pastrate
optiunile pentru grupul de pagini web continute in directorul current
si subdirectoarele acestuia; pot exista mai multe fisiere web.config in
fiecare subdirector;la nivelul sistemului setarile din toate fisierele
web.config sunt vazute unitar;o pagina web poate accesa toate
proprietatile din fisierele web.config aflate in directorul curent si din
toate directoarele ce compun calea catre aceasta;
™ Fisierul Global.asax: Contine functiile de tratare a evenimentelor
globale ale aplicatiei (lansarea aplicatiei, cereri, etc.)
™ Alte componente necesare compunerii aplicatiei;de obicei acestea
sunt assembly-uri, imagini, css-uri, etc. .

Incepand cu ASP.NET 2.0 structura de directoare recunoscute


automat s-a extins. Aceste directoare sunt prezenate in tabelul urmator:

Directoare Descriere
Bin Contine toate assembly-urile precompilate (de obicei Dll) pe care
aplicatia ASP.NET le foloseste: clasele compilate ale paginilor web
si/sau serviciilor web precum si assembly-urile referentiate.

App_Code Contine codul sursa pentru compilarea dinamica;de obicei sunt


componente separate de logica aplicatiei: clase pentru logica de
login sau acces la baza de date folosite in DAL (Data Access
Layer);assembly-urile rezultate in urma compilarii nu sunt depuse
in Bin ci in directoare temporare utilizate pentru compilarea
dinamica.

App_GlobalResources In acest director sunt pastrate resursele globale ce sunt accesate


de orice pagina din aplicatie;aici pot fi pastrate fisierele necesare
pentru globalizare.

App_LocalResources Area acceasi semnificatie cu App_GlobalResources numai ca


aceste resurse sunt dedicate numai unei singure pagini.

App_Data Acest director este folosit pentru pastrarea datelor fie ca sunt
fisiere de baze de date (de exemplu *.mdf) fie fisiere XML ce contin
date; tot aici se pastreaza si baza de date pentru ce furnizeaza
informatii despre roluri si autentificare..

App_WebReferences Contine referinte catre servicii Web folosite de aplicatie:fisiere


*.wsdl si *.disco.

App_Browsers Acest director contine definitii pentru tipurile de browser-e pentru


care este destinata aplicatia. Sunt fisiere XML ce descriu
capabilitatile pentru mai multe tipuri de browser-e. Desi ASP.NET
realizeaza acest lucru global prin intermediul acestor definitii se pot
obtine comportamente diferite ale aplicatiei in functie de browser.

App_Themes Aici sunt pastrate temele si skin-urile folosite in paginile aplicatiei.


8
Sisteme Distribuite Introducere in aplicatii ASP.NET

In legatura cu fisierul global.asax trebuie facute cateva precizari.


Dupa cum am spus mai sus acest fisier permite scrierea codului de
tratare pentru evenimentelor globale. Desi un clientii site-ului nu
acceseaza niciodata acest fisier codul din acesta se executa ca raspuns
la anumite evenimente. Acest fisier nu contine cod HTML si nici ASP.NET
in schimb contine metode cu nume predefinite ce sunt apelate in functie
de eveniment. Unele functii sunt apelate la fiecare cerere a unei pagini;
acestea sunt prezentate in tabelul de mai jos

Metode Descriere
Application_BeginRequest() Metoda apelata la inceputul fiecarei cereri.

Application_AuthenticateRequest() Metoda apelata chiar inaintea autentificarii.

Application_AuthorizeRequest() Metoda apelata dupa ce utilizatorul a fost autentificat


si urmeaza sa se verifice daca are autorizare pentru a
intra pe pagina.

Application_EndRequest() Este chemata chiar inainte de terminarea tratarii cererii


iar obiectele create sunt dealocate din memorie.

Alte metode nu sunt apelate la fiecare cerere pentru o pagina:

Metode Descriere
Application_Start() Metoda este apelata atunci cand aplicatie este lansata.Metoda este
utila pentru a initializa variabile folosite in intreaga aplicatie.

Application_End() Aceasta metoda este apelata chiar inainte de terminarea aplicatiei.


Acest lucru se poate intampla dupa ce un fisier de configuratie a fost
actualizat sau cand IIS trebuie restartat.

Application_Error() Este apelata cand o exceptie nu a fost tratata in aplicatie.

Session_Start() Metoda invocata de fiecare data cand o noua sesiune este creata.

Session_End() Metoda apelata cand o sesiune este inchisa.O sesiune se poate


inchide automat dupa oa perioada de timp (implicit 20 de minute)
daca nu au mai fost cereri pentru ea.

Obs: Metodele prezentate mai sus nu sunt singurele functii de tratare a


evenimentelor globale. Din aceasta selectie fac parte cele mai des
folosite metode. Pentru o lista detaliate a acestor functii predefinite se
poate consulta documentatia MSDN.

9
Sisteme Distribuite Introducere in aplicatii ASP.NET

Configurarea aplicatiilor ASP.NET

Configurarea in ASP.NET se realizeaza prin fisiere de configurare


XML. Acestea sunt usor de citit si editat , sunt usor de accesat si nu sunt
niciodata protejate la scriere. Aceasta ultima proprietate usureaza
procesul de configurare intrucat schimbarile in fisierul de configurare
sunt aplicate automat de IIS si nu manual prin intermediul unei comenzi
de repornire a serverului.
Primul fisier de configurare ce trebuie luat in considerare e
machine.config. Optiunile de configurare se refera la procesul lucrator
ASP.NET,inregistreaza diferiti provideri pentru autentificare sau
stabilirea rolurilor. Acesta se gaseste in directorul Config din directorul
de instalare a versiunii de .NET Framework; acesta poate fi:

c:\[WinDir]\Microsoft.NET\Framework\[Version]\Config

Pe langa acesta in acelasi director se mai afla si web.config ce


contine setari aditionale cum ar fi handler-e HTTP 8 si module HTTP 9 ; in
versiunea 1.x aceste setari se afla in machine.config.
Toate aplicatiile Web au mostenesc setarile din aceste doua
fisiere. In plus setarile din aceste fisiere se pot modifica pentru fiecare
aplicatie in parte sau se pot insera setari particulare prin crearea unui
nou fisier web.config in acelasi director unde se afla grupul de pagini
carorar le sunt detonate setarile; trebuie mentionat ca nu orice setare
din fisierele primare de configurare se poate modifica, de exemplu
modelul de procesare adica modul de reciclare a domeniilor de aplicatie.
Aplicatiile ASP.NET folosesc un sistem de configurare ierarhizat
pe mai multe nivele ce permit utilizarea unor anumite setari pentru
fiecare parte a aplicatiei. Pentru a folosi aceasta tehnica trebuie create
subdirectoare in interiorul directorului radacina al aplicatiei. Fiecare
subdirector mosteneste setarile directorului parinte. De exemplu daca
structura directorului virtual AppWeb ar avea un subdirector SubAppWeb
fiecare cu un fisier web.config pentru paginile din AppWeb se vor aplica
mai intai setarile din machine.config si web.config (din directorul Config
aflat in directorul de instalare a .NET Framework) si apoi cele din fisierul
web.config local;pentru paginile aflate in SubAppWeb se mai aplica toate
setarile de pana acum la care se dauga cele din fisierul web.config aflat
in directorul local.
Continutul unui fisier ce configurare ASP.NET este cuprins in
interiorul tag-ului <configuration>, ce reprezinta nodul root al
documentului XML. Cele mai folosite elemente (sau sectiuni) dintr-un
fisier de configurarea a aplicatiilor .NET sunt prezente mai jos:
<?xml version="1.0"?>

8
Un handler HTTP reprezinta
9
Un modul HTTP
10
Sisteme Distribuite Introducere in aplicatii ASP.NET

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<appSettings>
<add key="MessageOfTheDay" value="My quote"/>
</appSettings>
<connectionStrings>
<add name="PubsConnString" connectionString=
"Data Source=localhost;Initial Catalog=pubs;Integrated Security=SSPI"/>
</connectionStrings>
<system.web>
<pages>
<namespaces>
<clear />
<add namespace="System" />
<add namespace="System.Collections" />
<add namespace="System.Configuration" />
<add namespace="System.Text" />
<add namespace="System.Web" />
<add namespace="System.Web.UI" />
……………
</namespaces>
</pages>
<authentication mode="Windows"/>
</system.web>
</configuration>

Trebuie facuta observatia ca sistemul de configurare e specific


tuturor aplicatiilor .NET ; insa pentru ASP.NET elementul sub care pot fi
introduce optiuni specifice este <system.web>. In exemplul anterior
elementul <pages> cuprinde un element <namespaces> in care sunt
listate toate namespace-urile folosite in timpul fazei de precompilare.Tot
in <system.web> putem alege modul de realizare a autentificarii
utilizatorilor care cer o pagina;in exemplu aceasta se face pe baza
autentificarii Windows. Alte elemente des utilizate din <system.web>
sunt:
<compilation> - element ce contine alt element <assemlies> in
care se pot lista assembly-urile folosite in aplicatie;
<customErrors> - element ce precizeaza un URL de redirectare
atunci cand o eroare apare in cadrul aplicatiei;
<sessionState> - in cadrul acestui element se poate configura
locatia unde se pastreaza starea sesiunii (in memorie, pe un
server SQL ) sau modul in care sunt utilizate cookie-urile in
aplicatie.
<webServices> - cu acest element se pot configura serviciile
web pe care aplicatie web le utilizeaza: protocolul, portul , etc.

Sistemul de configurare al aplicatiilor .NET contine si alte doua


elemente des utilizate in aplicatiile ASP.NET: <appSettings> si
<connectionStrings>;ultimul poate fi utilizat incepand cu versiunea 2.0

11
Sisteme Distribuite Introducere in aplicatii ASP.NET

a .NET Framework si prin intermediul sau se pot defini mai multe


conexiuni la o baza de date.
Setarile proprii aplicatiei se pot adauga in elementul
<appSettings> sub forma unor perechi cheie-valoare; valorile si cheile
pot fi doar de tip sir caractere, intrucat valorile atributelor unui element
XML pot fi valori de tip sir de caractere.
Accesarea si modificarea setarilor din interiorul aplicatiei se face
prin folositea claselor WebConfigurationManager si Configuration 10 .
Clasa WebConfigurationManager contine urmatorii membri utili pentru
accesarea setarilor:
• AppSettings – Proprietate ce acceseaza elementele din
<appSettings>; accesarea se face pe baza numelui precizat de
atributul key;pentru exemplu de mai sus aveam urmatorul cod:

string MOTD=WebConfigurationManager.AppSettings["MessageOfTheDay"];

• ConnectionStrings – Proprietate prin care se pot obtine string-urile


de conexiune din <connectionStrings> :

string connStr=WebConfigurationManager.ConnectionStrings["PubsConnString"];

• OpenWebConfiguration() - Metoda ce returneaza un obiect de tip


Configuration prin intermediul caruia se pot edita setarile aplicatiei;

Configuration config =
WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
config.AppSettings.Settings["MessageOfTheDay"] = "New MOTD";
…..
config.Save();
…..
Trebuie observat ca OpenWebConfiguration() primeste ca
parametru o cale spre un director virtual unde se afla un fisier de
configurare si returneaza un obiect de tip Configuration ce contine toate
setarile mostenite pana la acest director virtual.

Obs:Incepand cu ASP.NET 2.0 setarile pentru aplicatiile Web se pot


edita prin intermediul Website Administration Tool (WAT).In esenta
reprezinta o aplicatie ASP.NET ce permite prin intermediul unei
interfete Web modificarea sau crearea unor setari in diferite sectiuni
ale fisierului de configurare. Pentru a configura setarile pentru
proiectul web curent din Visual Studio 2005 se alege din meniu
Website->ASP.NET Configuration.

10
Clase noi introduse in .NET Framework 2.0 aflate in System.Configuration si
System.Web.Configuration
12
Sisteme Distribuite Introducere in aplicatii ASP.NET

ASP.NET Web Forms

Paginile Web din ASP.NET sunt denumite oficial Web Foms si


permit crerea unei aplicatii Web in acelasi mod in care este construita o
aplicatie Windows folosind acceasi interfata bazata pe controale. Pentru
intelegerea lor trebuie retinute urmatoarele aspecte:
• Aplicatiile ASP.NET sunt executate pe server iar ceea ce apare in
browserul clientului reprezinta rezultatul acestei executii.
• Ceea ce se genereaza in urma executiei unei pagini este cod HTML.
ASP.NET genereaza cod HTML in functie de posibilitatile de randare a
browserului.
• Pentru interactiunea cu utilizatorii ASP.NET foloseste o metoda
numita postback prin intermediul careia sunt transmise inapoi la
server date despre actiunea efectuata de utilizator;o data ce
ASP.NET primeste aceste date lanseaza evenimentul asignat acelei
actiuni.
• Aplicatiile Web sunt aplicatii care nu pastreaza starea curenta.
Inainte de a transmite codul HTML pentru randare in browser, toate
obiectele care au fost construite pentru realizarea acestui cod HTML
sunt distruse. Pentru remedia acest lucru se folosesc tehnici precum
view state sau query string si obiecte persistente pentru o anumita
durata de timp : sesiune sau aplicatie.
In continuare vor fi prezentate aspecte legate:modelul controlului
in ASP.NET si procesarea paginilor ASP.NET

Web Forms Controale ASP.NET

Controalele ASP.NET sunt in esenta clase din biblioteca .NET


Framework ce reprezinta elemente visuale intr-un web form. Ierarhia
de clase pentru controale server este ilustrata in continuare:

13
Sisteme Distribuite Introducere in aplicatii ASP.NET

Clasa din care sunt derivate toate controalele server este Control si se
afla in namepace-ul System.Web.UI; nu trebuie confundata cu cea din
Windows Forms.Cei mai des folositi membri ai acestei clase in
programarea paginilor si la care se vor face referiri in exemplul din acest
laborator sunt prezentati in tabelul urmator:

Membri Descriere
ClientID Proprietate ce intoarce identificatorul controlului adica un nume unic
ales la intantierea paginii.

Controls Returneaza o colectie de controale continute in acest control..

EnableViewState Proprietate booleana prin care se activeaza sau dezactiveaza pastrarea


starii acestui control in urma unui postback;implicit ea este setata pe
adevarat.

ID Returneaza sau seteaza identificatorul (String) pentru acest control;


prin intermediul acestui nume controlul poate fi accesat in scripturile
server-side si in cod.

Page Returneaza o referinta la obiectul paginii parinte.

Parent Returneaza o referinta la controlul parinte;acesta poate fi un obiect de


tip Control sau o Page; trebuie observat ca obiectul paginii este tot un
control.

Visible Returneaza sau seteaza daca acest control este vizibil sau nu;in cazul in
care proprietatea este setata pe false atunci nu se va genera tag-ul
HTML corespunzator.

DataBind() Metoda ce realizeaza legarea controlului si a tuturor controalelor pe


care le contine la sursa de date.

FindControl() Metoda care cauta un control copil dupa nume in controlul curent sau in
toate controalele pe care le contine;este returnata o referinta la tipul
Control ce apoi poate fi convertita la tipul corespunzator;tipul este
returnat de metoda GetType().

Render() Metoda prin intermediul careia este generat codul HTML al acestui
controlului;nu este apelabila direct intrucat accesul este protected, in
schimb ASP.NET cheama aceasta metoda cand pagina este randata

Controalele server HTML din System.Web.UI.HtmlControls constituie


wrappere peste controalele standard HTML. Acestea sunt declarate la fel
insa se mai adauga atributul runat=”server” pentru a se specifica faptul
ca sunt executate pe server. Orice control HTML poate fi tranformat intr-
unul server daca se dauga acest atribut;daca nu exista o corespondenta
directa in libraria de clase ASP.NET va folosi clasa HtmlGenericControl.
In total sunt 20 de clase avand clasa de baza HtmlControl; ierarhia de
clase este urmatoarea:

14
Sisteme Distribuite Introducere in aplicatii ASP.NET

Cea de-a doua categorie importanta de controale ASP.NET o


reprezinta cea a controalelor Web. Ierarhia de clase se poate observa in
imaginea urmatoare:

Acestea contin aceeasi functionalitate a controalelor HTML dar contin


un set proprietati si metode mult mai usor de inteles si folosit;de
exemplu setarile de stil la cele de tip “html” se aplica prin precizarea
unui css, pe cand la cele “web” acest lucru se face programatic prin
setarea unor proprietati.In plus tipurile de controale sunt destul de

15
Sisteme Distribuite Introducere in aplicatii ASP.NET

limitate ca numar si ca functionalitati intrucat depind de standardul


HTML. Controlele Web din ASP.NET ofera o mult mai multe tipuri
controale si cu functionalitati mai complexe. Clasele de baza pentru
aceste controale sunt WebControl si BaseBoundControl pentru controale
ce reprezinta structuri de date complexe (liste , arbori).

Alte diferente intre cele doua tipuri de controale ar fi:


™ WebControl ofera un model mult mai abstract si mai consistent
decat controalele server HTML
™ Controale “web” pot genera mai multe tag-uri HTML plus acolo
unde este cazul JavaScript.
™ Declararea lor se face cu sintaxa <asp:tipcontrol> avand grija sa
prefixam numele cu “asp:”;acest prefix ajuta la distingerea celor
doua tipuri;

Controale Web trebuie sa se supuna urmatoarelor reguli:


• Fiecare declaratie trebuie sa aiba un tag de inchidere sau un
element gol “/>” la sfarsit;tag-urile ASP.NET urmeaza aceleasi
reguli ca XHTML;
• Toate controalele Web trebuie declarate cu un atribut
runat=”server” chiar daca nu declaseaza un postback;acest lucru
nu este aplicabil in cazul celor “html”;

In cadrul controalelor Web exista si doua tipuri speciale ce


controale :
• Rich sau avansate:Acestea au posibilitatea de a genera cantitati
mari de cod HTML si JavaScript pentru a crea interfata;de exeplu
controlul de tip calendar sau TreeView;
• Controale de validare:Permit validarea datelor de intrare pentru
un control;de exemplu se poate restrictiona tipul si numarul
caractere folosite ca date de intrare pentru un control de tip
textbox;

Pe langa aceasta clasificare controalele Web mai pot fi grupate in


functie de specializarea lor:
• Controale pentru reprezentarea structurilor de date. Aici sunt
incluse controalele de tip grid si lista proiectate pentru a putea
afisa cantitati mari de informatie permitand paginarea, editarea
sau sortarea elementelor;un al aspect nou introdus in cadrul
acestor date este folosirea sabloanelor ce permit crearea de
controale adaptabile la tipul de vizualizare dorit;
• Controale de navigare: permit utilizatorului navigarea prin
structura site-ului web;

16
Sisteme Distribuite Introducere in aplicatii ASP.NET

• Controale de login: aceste controale usureaza munca in


realizarea de pagini de login intrucat interfata lor este usor
adaptabila si urmazeaza modelul de autentificare din ASP.NET;
• Web parts: Reprezinta un set de controale utilizate in constructia
portalelor si site-urilor web configurabile de catre utilizatori;
• Controale Mobile ASP.NET: Sunt controale asemanatoare cu cele
web insa sunt adaptate pentru clienti mobili cum ar fi dispozitive
precum PDA sau smartphone sau orice telefon mobil ce poate
randa pagini in standardele HTML si WML (Wireless Markup
Language).ASP.NET genereaza controale in functie de
capabilitatile browser-ului de pe dispozitivul mobil genereaza
pagini WML sau HTML;

Web Forms – Procesarea paginilor ASP.NET

Pentru intelegerea modelului de procesare a a paginilor ASP.NET


este vital cunoasterea fazelor procesare si ordinea in care sunt
executate si evenimentele care le ridica. In mare orice pagina
ASP.NET parcurge 6 etape importante.
Crearea si initializarea paginii (ASP.NET). In prima faza ASP.NET
creeaza obiectul paginii, generaza controalele definite cu tag-uri in
fisierul *.aspx;in plus daca cererea este un postback, informatia de
view state este deserializata si apoi pe baza ei sunt initializate
controalele. La acest pas este ridicat evenimentul Page.Init;acesta
este rar folosit intrucar unele controale ori nu au fost create ori nu
au fost initializate cu informatia din view state. In aceasta aceasta
etapa operatiile de creare si initializare sunt efectuate automat de
framework.
Initializarea paginii din codul aplicatiei. In aceasta faza obiectele
pentru controale au fost deja create si initializate fie cu valorile
implicite fie cu informatia din view state. Evenimentul ce marcheaza
aceasta etapa este Page.Load executat la fiecare cerere chair si daca
este un postback. Diferentierea intre cele doua actiuniu se face prin
inspectarea proprietatii statice Page.isPostBack. Acest moment este
indicat pentru initializarea controalelor cu date obtinute prin operatii
consumatoare de timp si trebuie initializate o singura data;de
exemplu afisarea unei tabele intr-un control GridView: la un eventual
postback se verifica proprietatea isPostBack si se trece peste
preluarea tabelei din baza de date. In celelalte cazuri activarea view
state-ului ( vezi proprietatea Control.EnableViewState) rezolva
initializarea controlului.
Validarea.ASP.NET introduce controale noi de validare ce
realizeaza verificarea automata a datelor introduse de utilizatori iar
unde este cazul afiseaza mesaje de eroare. Aceste controale “intra in

17
Sisteme Distribuite Introducere in aplicatii ASP.NET

functiune” dupa incarcarea paginii dar inainte de tratarea celorlalte


evenimente. Daca o pagina a fost validata sau nu se poate
determina cercetand proprietatea Page.IsValid.
Tratarea evenimentelor. In aceast punct controalele sunt create
si intializate iar pagina este validata. In general evenimentele
controalelor web pot fi clasificate in doua categorii: declansate
imediat (butoane ,link-uri sau controale ce utilizeaza functia
JavaScript __doPostBack() ) si cele declansate la o schimbare de
stare ( de exemplu selectarea unui element dintr-un drop down list).
In cazul controalelor web evenimentele de schimbare de stare pot
declansa postback automat prin setarea pe adevarat a proprietatii
AutoPostBack;in caz contrar evenimentul se va executa la urmatorul
postback.
Legarea automata a datelor (data binding).In mare pentru
controalele ce folosesc surse de date exista doua momente in care
se interogheaza sursa de date:unul chiar inaintea evenimentului
Page.PreRender si consta in actualizarea sursei (inserari,stergeri si
actualizare) si a doua dupa tratarea evenimentului in care datele
sunt preluate din sursa de date si aduse controalelor la care sunt
asignate; acest model vine cu o limitare intrucat nici o functie de
tratare a unui eveniment nu poate accesa ultimele date luate din
sursa de date intrucat acestea nu au fost luate inca; evenimentul
Page.Unload este declansat dupa ce codul HTML a fost generat.
Evenimentul Page.PreRender semnifica ultima actiune inainte de
generarea codului HTML.
Distrugerea obiectelor.Aceasta faza incheie ciclul de viata al unei
pagini web si consta in distrugerea obiectelor componente ale paginii
si este precedata de evenimentul Page.Unload . Orice resursa
unmanaged trebuie dealocata la acest pas;cel mai adesea se
utilizeaza evenimentul Page.Dispose declansat cand pagina este
distrusa de garbage collector.

Obs:Termenul de postback se refera la o actiune specifica pentru o


pagina web interactiva ce consta in trimiterea ei in forma in care se
afla pe calculatorul utilizatorului inapoi la server pentru procesare.

Obiectele ASP.NET si gestionarea stariilor obiectelor

Fiecare pagina , la nivel de code-behinde , este derivata din clasa


Page din namespace-ul System.Web.UI . Clasa nou creata mosteneste
pe langa o enorma functionalitate si cateva proprietati utile: Session,
Application, Request ,Response, Server si User. Aceste proprietati
corespund unor obiecte de sine statatoare din ASP.

18
Sisteme Distribuite Introducere in aplicatii ASP.NET

Obiectul Request este o instanta a clasei HttpRequest din


namespace-ul System.Web. Acest obiect reprezinta contextul cererii
HTTP care a determinat incarcarea paginii. Contine infromatii despre
parametrii din URL si informatiile trimise de browserul clientului.Cativa
dintre cei mai des folositi membri sunt prezentati in tabelul urmator:

Proprietate Descriere
ApplicationPath Intoarce calea relativa catre directorul virtual curent al aplicatie.

PhysicalPath Intoarce calea fizica a directorului aplicatiei.

Cookies Intoarce o colectie de coockie-uri trimise de acesta cerere.

QueryString Intoarce o tabela hash avand drept cheie numele parametrului din lista
de parametri din URL.

Obiectul Response este o instanta clasei HttpResponse din


namespace-ul System.Web .Intrucat controalele web pot genera cod
HTML acest obiect nu este utilizat foarte rar pentru a genera
programatic cod HTML. Cea mai frecvent utilizare este atunci cand se
doreste o redirectare;aceast lucru se realizeaza prin metoda Redirect()
.Un scenariu in care poate utilizat este atunci cand un utilizator incearca
sa intre pe o pagina si nu are destule drepturi, atunci va fi redirectat
catre o pagina ce contine un text de eroare. Alt scenariu des intalnit
implica folosirea query string pentru a transmite parametri paginii de
redirectare. Exista un mic inconvenient intrucat redirectarea nu se face
automat: se trmite un mesaj inpoi la browser si il informeaza despre
noua pagina.
Obiectul Sever este reprezentat de clasa HttpServerUtility din
cadrul aceluiasi namespace ca si obiectele prezentate pana acum si
contine functii si proprietati ajutatoare. O functie utila este Tranfer() ce
realizeaza o redirectare catre o pagina din aplicatia curenta;desi nu
poate face redirectare catre alta pagina aflata pe alt server web sau
non-ASP.NET este mai rapida decat Request.Redirect() intrucat nu se
mai transmite nici un mesaj browserului web. La fel de utila este si
functia MapPath() ; folosita impreuna cu Request.ApplicationPath se
obtine o cale fizica absoluta ca in exemplul urmator:

string physicalPath = Server.MapPath(Request.ApplicationPath + "/info.txt"));

Obiectul User contine informatia despre utilizatorul care initiaza


cererea curenta si permite testarea rolului sau. Clasa implementeaza
interfata System.Security.Principal.IPrincipal.
Obiectul sesiune este o instanta a clasei HttpSessionState din
namespace-ul System.Web.SessionState. Este proiectata pentru a
pastra orice date specifice pentru un singur utilizator intre cereri.

19
Sisteme Distribuite Introducere in aplicatii ASP.NET

Obiectul sesiune ofera un dictionar de elemente cheie-valoare ce


reprezinta datele utilizatorului pentru aceasta sesiune. In spatele acestui
obiect se afla o intreaga arhitectura intrucat mentinerea informatiilor
despre sesiune nu face parte din standardul HTTP.Principalele
caracteristi ale acestui model de gestionare a starilor sunt:
• Permite pastarea tuturor tipurilor serializabile;cele neserializabile pot
fi pastrate doar daca sesiunea este configurata in-process;
• Mentinerea datelor se face atat in:memoria serverului, folosind un
proces separat sau memorate intr-o baza de date;
• Timpul de viata al sesiunii implicit este de 20 de minute de la ultima
cerere insa poate fi modificata programatic;
• Obiectul poate fi accesat din toata aplicatia;

Obs:Configurarea sesiunii,asa cum precizam anterior, se poate face


prin actualizarea elementului <sessionState> din fisierul de
configurare web.config .

Pentru pastrarea evidentei sesiunilor deschide, ASP.NET foloseste un


identificator unic pe 120 de biti prin intremediul caruia poate diferentia
sesiunile existente. Trebuie retinut ca de fiecare data cand este deschisa
o noua sesiune este creat un nou identificator si trimis browser-ului
client.
In ASP.NET exista doua moduri de transmitere a acestei
informatii: implicit, printr-un cookie, ce are implicit numele
ASP.NET_SessionId sau in cazul in care clinetul nu suporta cookie-uri
prin inserarea in cadrul URL-lui ca in exemplul urmator:

http://localhost/WebApp/((tmyvyy54esofk4g5cffbiqash)/index.aspx

Pentru configurarea celor doua moduri se utilizeaza atributele


cookieless si cookieName din elementul <sessionState> al fisierului de
configurare web.config, dupa cum urmareaza:

<sessionState cookieless="UseCookies" cookieName="ASP.NET_SessionId" />

Exista trei moduri de lucru pentru sesiune:

1. InProc: obiectele ce compun starea sesiunii sunt pastrate in spatiul


de memorie alocat domeniului aplicatiei ASP.NET;aceasta este
optiunea implicita pentru modul de operare a sesiunii. Un aspect
negativ ar fi acela ca starea sesiunii fiind pastrata in memorie se
poate pierde foarte usor daca domeniul aplicatiei sau serverul sunt
repornite. Cu toate acestea ofera o performanta mai ridicata decat
celelalte moduri si se pot pastra obiecte chiar si neserializabile;

20
Sisteme Distribuite Introducere in aplicatii ASP.NET

2. StateServer: Tinand cont ca domeniul aplicatiei sau serverrul web se


pot reinitializa pierzandu-se informatiile din starea sesiune ASP.NET
foloseste un proces separat aspnet_state.exe (sub forma unui
serviciu Windows). Acest mod este util in nu numai pentru a preveni
pierderea de informatii ci si pentru a sincroniza datele cand aplicatia
ruleaza intr-o ferma de servere web. Pentru a configura acest mod
trebuie precizat adresa ip si portul la care asculta acest serviciu prin
atributul stateConnectionString din elementul <sessionState> din
fisierul de configurare. Obiectele salvate aici trebuie sa fie
serializabile.
3. SqlServer: A treia varianta de pastrare a starii sesiunii este prin
folosirea unui server SQL. Obiectele din sesiune trebuie sa fie
serializabile. In fisierul configurare trebuie precizat un connection
string. Nu intotdeauna este precizata baza de date in acesta; baza de
date considerata implicit este ASPState. In functie de modul de
operare: temporar (datele sesiunii sunt pierdute cand serverul SQL
este oprit) sau persistent in directorul de intalare al .NET Framework
exista doua seturi de scripturi SQL (instalare si dezinstalare).

Obiectul aplicatiei este similar si obiectul sesiunii pastreaza


obiectele globale intr-o structura de tip dictionar; fiecare valoare este
retinuta ca o referinta de tip Object iar durata lor de viata este
dependenta de cea a aplicatiei.In ceea ce priveste gestionare starii
aplicatiei exista clasa HttpApplicationState din namespace-ul
System.Web ce mentine o colectie de obiecte globale comune tuturor
clientilor. O alta varianta de a declara variabile globale pentru aplicatie
este de a adauga membri statici in clasa aplicatiei;clasa derivata din
HttpApplication. Cu toate ca ASP.NET creeaza un obiect HttpApplication
pentru fiecare cerere membrii static sunt comuni. Trebuie facuta
observatia ca acesti membri pot fi accesati in acelasi timp de mai multe
fire de executie (corespunzand unui client) lucru ce implica crearea unui
mecanism de excludere mutuala.

Tema

21
Sisteme Distribuite Introducere in aplicatii ASP.NET

Bibliografie

[1] Pro ASP.NET 2.0 in C# 2005 Matthew MacDonald , Mario Szpuszta,


Apress 2005
[2] MSDN 2005
[3] Programming .NET Web Services, Alex Ferrara, Matthew MacDonald
O’Reilly, 2002
[4] http://www.gotdotnet.com

22

You might also like