Grundlagen ASP.NET 2.0
Steffen Forkmann, msu solutions GmbH
http://www.msu-solutions.de
2
Agenda
• Was ist ASP.NET eigentlich?– Ein paar Folien zum Einstieg
• Viele Demos der neuen Features– MasterPages/ Themes– Konfiguration– DataBinding (3-Tier Architektur)– Provider Model– SQL-Caching– URL-Mapping
3
Was ist ASP.NET
• ASP.NET ist eine Bibliothek für Webseiten und Webservices
• Basiert auf .NET Runtime und .NET Framework– Riesige Objektbibliothek– Garbage Collection– Eigene Klassen und Assemblies problemlos einbindbar
• Objektorientiert und eventgesteuert
4
Was ist ASP.NET (2)
• Verschiedene Sprachen verfügbar: C#, VB.NET, …• Performanz durch kompilierten Code• Klare Trennung von Design und Programmcode• Automatische Sessionverwaltung• Einfache Datenbankintegration, Lokalisierung und
Fehlerbehandlung
5
ASP.NET Architektur
Request Handler
HTTP Module
ASP.NET Runtime
HTTP Request
Managed Code
Unmanaged Code
Weitere Funktionalität
HTTP Response
IIS
6
.aspx – Aufbau
(Inline Code-Blöcke)(Inline Code-Blöcke)
Statischer TextStatischer Text
Control TagsControl Tags
HTML TagsHTML Tags
DirektivenDirektiven
7
Key-Concepts
• Server controls– Kapseln die Erzeugung des eigenen HTML-Output– Feuern Ereignisse bei Statuswechseln
• “Event Handler”-Code– Inline oder besser als Code-Behind (in separaten File)
• Code-Ausführung in Phasen - nicht linear– Init, Load, Render, Unload, usw.
8
Ziele bei ASP.NET 2.0
• „Das Rad nicht neu erfinden“– Massive Codereduktion durch deklarative Programmierung und
“Zero-Code-Szenarien”– (Microsoft spricht von 70% Codereduktion)
• Standardfunktionalitäten „out of the box“ mitgeliefert:– Benutzer- / Rollenverwaltung– WYSIWYG „Skins & Themes“ – Architektur– Viele neue Controls wie LogIn- und Registrierungs-Dialoge– SQL Caching
• Hohe Flexibilität durch Provider Model– In jede Ebene des Technologie-Stacks kann manuell eingegriffen
werden
9
Neue Technologien in ASP.NET 2.0
Daten-controls
Daten-controls
Login-controls
Login-controls Web PartsWeb Parts Andere
neue Controls
Andereneue Controls
MasterPagesMasterPages Themesund Skins
Themesund Skins LokalisationLokalisation KompilierungKompilierung
Benutzer-verwaltung
Benutzer-verwaltung
Rollen-verwaltung
Rollen-verwaltung ProfileProfile KonfigurationKonfiguration
SiteMaps
SiteMaps
HealthMonitoring
HealthMonitoring
SQLCaching
SQLCaching
Con
trols
Pag
eFr
am
ew
ork
Serv
ices
un
d A
PIs
10
Vorteile durch VS 2005• “Intellisense Everywhere”!
– Code behind, Inline code, HTML, CSS, ASP.NET, Web.config, XML Dateien, usw.
• WYSIWYG HTML Designer – CSS Style Generator
• Leistungsstarker Debugger– Edit & Continue– Eigene Debugger-Visualizer
• Integrierter ASP.NET Test-Web Server– Testsystem auf lokalem Rechner– Webserver wird mit der Visual Studio IDE geschlossen
• Code wird vom Designer nicht formatiert
11
Visual Web Developer 2005
• Kostenloser Download als Express-Version:– www.microsoft.com/germany/msdn/vstudio/express/vwd/default.mspx
12
Konfiguration
• Administrative Tools– ASP.NET MMC snap-in– Web Site Administration Tool (Webadmin.axd)
• machine.config– Systemweite Standard-Einstellungen
• web.config– Projektspezifische Einstellungen
• Configuration API
13
web.config
• XML-Konfigurationsfile
System.Web
UI
Design
WebControls
HtmlControls
Services
Configuration
Description
Discovery
Protocols
Caching
Configuration
Hosting
SessionState
14
Durchgehendes Design
• Standarddesign fürdie meisten Seiten:
• Header, Menü,Inhalt, Footer
Header
Navigation
Inhalt
Footer
15
Durchgehendes Design (2)
• Bisherige Lösungsmöglichkeiten:– Include Files:
• Keine Code-Kapselung (Code passt evtl. nicht 100%)
• Man bekommt schnell unbalancierte HTML-Tags
• Selten WYSIWYG-Unterstützung
– Tool-basierte Lösungen (z.B. Dreamweaver)• Meist nur Design-Time-Unterstützung
• Code für Seite separat
• Spätere Änderungen sehr schwer
16
MasterPages
• Wir wollen: Durchgehendes und wartbares Seitendesign ohne Includes
• Lösung: MasterPages– "Visuelle Vererbung" mit Content Platzhaltern– WYSIWYG-Unterstützung durch VS2005– Anwendung deklarativ und programmatisch möglich– Verschachtelte MasterPages werden unterstützt
17
DemoDemo
Seitenvorlagen (Master Pages)Seitenvorlagen (Master Pages)
18
Themes
<%@ Page Theme=“Design">
Vorher: Nachher:
19
DataAccess PHP
// Connectmysql_pconnect($dbServer, $dbUser, $dbPsw);mysql_select_db($dbName);
// Get data$result = mysql_query(“select * from products”);foreach($result as $row){ …}
…
// update data$query = “insert name, .. into products values (‘$name’, …)”;mysql_query($query);
1. Konfiguration im Code (unverschlüsselt)
2. SQL-Queries im Code
3. Query-Parameter sind potentiell angreifbar
Es geht auch besser! (auch in PHP )
20
Problem 1: Verschlüsselung <connectionStrings
configProtectionProvider="DataProtectionConfigurationProvider"> <EncryptedData> <CipherData> <CipherValue>
AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAed...GicAlQ== </CipherValue>
</CipherData> </EncryptedData></connectionStrings>
private void ProtectSection(string sectionName) { Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath); ConfigurationSection section = config.GetSection(sectionName); if (section != null && section.SectionInformation.IsProtected) { section.SectionInformation.ProtectSection();
config.Save(); } }
21
DataAccess PHP
// Connectmysql_pconnect($dbServer, $dbUser, $dbPsw);mysql_select_db($dbName);
// Get data$result = mysql_query(“select * from products”);foreach($result as $row){ …}
…
// update data$query = “insert name, .. into products values (‘$name’, …)”;mysql_query($query);
1. Konfiguration im Code (unverschlüsselt)
2. SQL-Queries im Code
3. Query-Parameter sind potentiell angreifbar
Es geht auch besser! (auch in PHP )
22
Problem 2: DataBinding
• Anbindung visueller Elemente an Daten– „Quick and Dirty“, wie in PHP?– Oder nach Lehrbuch, durch Zugriff auf Businesslogik
und DataAccessLayer?
• Lösung: Data Provider Controls– Deklarative Anwendung Codereduktion
23
3-Tier Architektur
• Strenge Trennung in:– Data Access Layer – Datenzugriff (Queries, ConnectionStrings, …)– Business Logic Layer – Implementierung der Geschäftsregeln– Presentation Layer – Visualisierung der Daten
24
DemoDemo
Data BindingData Binding
25
DataAccess PHP
// Connectmysql_pconnect($dbServer, $dbUser, $dbPsw);mysql_select_db($dbName);
// Get data$result = mysql_query(“select * from products”);foreach($result as $row){ …}
…
// update data$query = “insert name, .. into products values (‘$name’, …)”;mysql_query($query);
1. Konfiguration im Code (unverschlüsselt)
2. SQL-Queries im Code
3. Query-Parameter sind potentiell angreifbar
Es geht auch besser! (auch in PHP )
26
Problem 3: SQL-Injectionstring _username = Request.Form["username"]; string _password = Request.Form["password"]; string sql = "select * from users where username='" + _username +
"' and password='" + _password + "'";
Username: ' or 1=1 --- Password: [Empty]
Lösung:
1. Eingaben validieren!
2. Parametrisierte Queries:
myCommand = new SqlCommand("select * from users where " +
" username = @Username and Password = @Password"); myParameter = myCommand.Parameters.Add( new SqlParameter("@Username", SqlDbType.VarChar, 50)); myParameter.Direction = ParameterDirection.Input; myParameter.Value = Request.Form["username"];
Select * from users where username=‘‘ or 1=1 --- and password=‘‘
27
Authentifizierung
• Aufgabe: Aufwand für Autorisierung und Authentifizierung reduzieren– Im besten Fall komplett „out of the Box“– Flexible Anbindung an beliebige Backendsysteme
• Lösung: Membership-Provider– Flexible, modulare Kombination aus
Providerkomponenten, API und User Interface-Komponenten
28
Membership-Provider
Membership API (Benutzerverwaltung)
Benutzer-daten Access Andere
Datenquellen
Controls LoginLogin LoginStatusLoginStatus LoginViewLoginView
AccessMembershipProviderAccessMembershipProvider Andere ProviderAndere Provider
Membership Provider
MembershipMembership MembershipUserMembershipUser
SqlMembershipProviderSqlMembershipProvider
SQL Server
Andere Login-Controls
Andere Login-Controls
29
DemoDemo
LogInLogIn
30
Autorisierung
• Erlaube “Adminstratoren” und lehne Rest ab:
• Auch für Unterverzeichnisse bzw. einzelne Seiten einstellbar
<!-- * = alle, ? = anonym bzw. nicht auth. --><authorization> <allow verbs="POST" Roles="Administrator" /> <deny users="*" /></authorization>
31
Sitemap-Provider
Site Navigation API
Site Maps
Web.sitemap OtherData Stores
Controls MenuMenu TreeViewTreeView SiteMapPathSiteMapPathSiteMap-
DataSourceSiteMap-
DataSource
SiteMapSiteMap
SiteMapNodeSiteMapNodeSiteMapNodeSiteMapNode SiteMapNodeSiteMapNode
XmlSiteMapProviderXmlSiteMapProvider Other Site MapProviders
Other Site MapProviders
Providers
32
DemoDemo
SiteMapSiteMap
33
SQL-Caching
• Aufgabe:– Hohe Performance bei datengetriebenen,
hochfrequentierten Webseiten
• Lösung: SQL Caching– Zusammenarbeit von Datenbank und Webapplikation– Cache-Invalidierung bei Datenänderung;
Seite wird nur bei geänderten Daten neu gerendert– SQL-Server 2000 und 7.0
• Polling-Prozess und Trigger (Table-Level)
– SQL-Server 2005• Direkte Unterstützung durch Notifications (Row-Level)
34
SQL-Caching (Polling)
• SQL-Server 2000: Mit aspnet_regsqlcache entsprechende Tabellen konfigurieren
• Web.config:<system.web> <cache>
<sqlCacheDependencyenabled="true"pollTime="1000"> <databases><addname="Northwind" connectionStringName="Northwind"/>
</databases> </sqlCacheDependency> </cache></system.web>
ASP.NET-Seite oder DataSource für Caching konfigurieren:<%@ OutputCacheduration="3600"
varybyparam="none" sqldependency="Northwind:Categories"%>
35
SQL-Caching (Push)
IISSQL-Server
2005
Worker Process (ASP.NET Application)
Worker Process (ASP.NET Application)
TableTable
NotificationQueue
NotificationQueue
PubsPubs
SQLDependencyOnChange
SQLDependencyOnChange
SQLCommandSQLCommand
UPDATE INSERTDELETE
OnChange
Neu registrieren, wenn wieder
benachrichtigt werden soll
Cache-Invalidieru
ng
36
URL-Mapping
• Virtuelle URLs werden auf physische URLs abgebildet
• Wichtig für Suchmaschinen<urlMappings enabled="true"> <add url="~/Home.aspx" mappedUrl="~/default.aspx?tabindex=0" /> <add url="~/Forums.aspx" mappedUrl="~/default.aspx?tabindex=1" /> <add url="~/Faq.aspx" mappedUrl="~/default.aspx?tabindex=2" /></urlMappings>
Virtuelle URL
Physische URL
37
Fazit
• ASP.NET 2.0 soll Produktivität, „gute“ Architektur und Performance vereinen– ASP.NET bietet eine drastische Erhöhung der
Produktivität für „Allerweltsaufgaben“ bei der Webprogrammierung
– Kompromisslose Objektorientierung und mehrschichtige Architektur
– Caching
38
Literatur
Kostenlos verfügbare Online-Bücher und Artikel
• C# OpenBook http://www.galileocomputing.de/openbook/csharp/index.htm
• Einstieg in VB.NET OpenBook http://www.galileocomputing.de/openbook/vb_net/
• Einstieg in ASP.NET OpenBookhttp://www.galileocomputing.de/openbook/asp/
• 3-tier Architecture with ASP.NET 2.0http://msdn2.microsoft.com/en-us/library/aa581769.aspx
39
Vielen Dank
• Gibt es Fragen?• Gerne beantworte ich diese auch via Email an
[email protected]!• Die Vortragsfolien können auf der Webseite
http://www.navision-blog.de/ herunter geladen werden