Was ist ASP.NET (2)

Werbung
Grundlagen ASP.NET 2.0
Steffen Forkmann, msu solutions GmbH
[email protected]
http://www.msu-solutions.de
Agenda
• Was ist ASP.NET eigentlich?
– Ein paar Folien zum Einstieg
• Viele Demos der neuen Features
–
–
–
–
–
–
2
MasterPages/ Themes
Konfiguration
DataBinding (3-Tier Architektur)
Provider Model
SQL-Caching
URL-Mapping
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
3
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
4
ASP.NET Architektur
Unmanaged Code
HTTP Request
HTTP Response
IIS
ASP.NET Runtime
HTTP Module
Request Handler
Weitere Funktionalität
Managed Code
5
.aspx – Aufbau
Direktiven
(Inline Code-Blöcke)
Statischer Text
Control Tags
HTML Tags
6
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.
7
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
8
Services
und APIs
Page
Framework
Controls
Neue Technologien in ASP.NET 2.0
9
Datencontrols
Logincontrols
Web Parts
Andere
neue Controls
MasterPages
Themes
und Skins
Lokalisation
Kompilierung
Benutzerverwaltung
Rollenverwaltung
Profile
Konfiguration
Site
Maps
Health
Monitoring
SQL
Caching
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
10
Visual Web Developer 2005
• Kostenloser Download als Express-Version:
– www.microsoft.com/germany/msdn/vstudio/express/vwd/default.mspx
11
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
12
web.config
• XML-Konfigurationsfile
System.Web
13
UI
Services
Caching
Design
Configuration
Configuration
WebControls
Description
Hosting
HtmlControls
Discovery
Mail
Protocols
SessionState
Durchgehendes Design
• Standarddesign für
die meisten Seiten:
• Header, Menü,
Inhalt, Footer
Header
Inhalt
14
Footer
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
15
MasterPages
• Wir wollen: Durchgehendes und wartbares
Seitendesign ohne Includes
• Lösung: MasterPages
–
–
–
–
16
"Visuelle Vererbung" mit Content Platzhaltern
WYSIWYG-Unterstützung durch VS2005
Anwendung deklarativ und programmatisch möglich
Verschachtelte MasterPages werden unterstützt
Demo
Seitenvorlagen (Master Pages)
17
Themes
<%@ Page Theme=“Design">
Vorher:
18
Nachher:
DataAccess PHP
1. Konfiguration
// Connect
mysql_pconnect($dbServer, $dbUser, $dbPsw);
mysql_select_db($dbName);
im Code (unverschlüsselt)
2. SQL-Queries
// Get data
$result = mysql_query(“select * from products”);
foreach($result as $row){
…
}
im Code
…
3. Query-Parameter sind potentiell angreifbar
// update data
$query = “insert name, .. into products values (‘$name’, …)”;
mysql_query($query);
Es geht auch besser!
19
(auch in PHP )
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();
}
}
20
DataAccess PHP
1. Konfiguration
// Connect
mysql_pconnect($dbServer, $dbUser, $dbPsw);
mysql_select_db($dbName);
im Code (unverschlüsselt)
2. SQL-Queries
// Get data
$result = mysql_query(“select * from products”);
foreach($result as $row){
…
}
im Code
…
3. Query-Parameter sind potentiell angreifbar
// update data
$query = “insert name, .. into products values (‘$name’, …)”;
mysql_query($query);
Es geht auch besser!
21
(auch in PHP )
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
22
3-Tier Architektur
• Strenge Trennung in:
– Data Access Layer – Datenzugriff (Queries, ConnectionStrings, …)
– Business Logic Layer – Implementierung der Geschäftsregeln
– Presentation Layer – Visualisierung der Daten
23
Demo
Data Binding
24
DataAccess PHP
1. Konfiguration
// Connect
mysql_pconnect($dbServer, $dbUser, $dbPsw);
mysql_select_db($dbName);
im Code (unverschlüsselt)
2. SQL-Queries
// Get data
$result = mysql_query(“select * from products”);
foreach($result as $row){
…
}
im Code
…
3. Query-Parameter sind potentiell angreifbar
// update data
$query = “insert name, .. into products values (‘$name’, …)”;
mysql_query($query);
Es geht auch besser!
25
(auch in PHP )
Problem 3: SQL-Injection
string _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]
Select * from users where username=‘‘ or 1=1 --- and password=‘‘
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"];
26
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 InterfaceKomponenten
27
Membership-Provider
Controls
Login
LoginStatus
Andere LoginControls
LoginView
Membership API (Benutzerverwaltung)
Membership
MembershipUser
Membership Provider
AccessMembershipProvider
Benutzerdaten
28
Access
SqlMembershipProvider
SQL Server
Andere Provider
Andere
Datenquellen
Demo
LogIn
29
Autorisierung
• Erlaube “Adminstratoren” und lehne Rest ab:
<!-- * = alle, ? = anonym bzw. nicht auth. -->
<authorization>
<allow verbs="POST" Roles="Administrator" />
<deny users="*" />
</authorization>
• Auch für Unterverzeichnisse bzw. einzelne Seiten
einstellbar
30
Sitemap-Provider
Controls
Menu
Site Navigation API
SiteMapNode
Providers
SiteMapDataSource
TreeView
SiteMap
SiteMapNode
SiteMapNode
XmlSiteMapProvider
Other Site Map
Providers
Web.sitemap
Other
Data Stores
Site Maps
31
SiteMapPath
Demo
SiteMap
32
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)
33
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"%>
34
SQL-Caching (Push)
Worker Process
(ASP.NET Application)
SQLCommand
Table
SQLDependency
OnChange
OnChange
CacheInvalidierun
g
IIS
35
Notification
Queue
Neu registrieren,
wenn wieder
benachrichtigt
werden soll
Pubs
UPDATE
INSERT
DELETE
SQL-Server
2005
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
36
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
37
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 OpenBook
http://www.galileocomputing.de/openbook/asp/
• 3-tier Architecture with ASP.NET 2.0
http://msdn2.microsoft.com/en-us/library/aa581769.aspx
38
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
39
Herunterladen