390 likes | 510 Views
Grundlagen ASP.NET 2.0. Steffen Forkmann, msu solutions GmbH steffen.forkmann@msu-solutions.de http://www.msu-solutions.de. Agenda. Was ist ASP.NET eigentlich? Ein paar Folien zum Einstieg Viele Demos der neuen Features MasterPages/ Themes Konfiguration DataBinding (3-Tier Architektur)
E N D
Grundlagen ASP.NET 2.0 Steffen Forkmann, msu solutions GmbH steffen.forkmann@msu-solutions.de http://www.msu-solutions.de
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
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
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
ASP.NET Architektur Unmanaged Code HTTP Request HTTP Response IIS ASP.NET Runtime HTTP Module Request Handler Weitere Funktionalität Managed Code
.aspx – Aufbau Direktiven (Inline Code-Blöcke) Statischer Text Control Tags HTML Tags
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.
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
Neue Technologien in ASP.NET 2.0 Web Parts Andere neue Controls Daten- controls Login- controls Controls Kompilierung Lokalisation MasterPages Themes und Skins Page Framework Profile Benutzer- verwaltung Rollen- verwaltung Konfiguration Services und APIs Site Maps SQL Caching Health Monitoring
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
Visual Web Developer 2005 • Kostenloser Download als Express-Version: • www.microsoft.com/germany/msdn/vstudio/express/vwd/default.mspx
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
System.Web UI Services Caching Design Configuration Configuration WebControls Description Hosting HtmlControls Discovery Mail Protocols SessionState web.config • XML-Konfigurationsfile
Header Navigation Inhalt Footer Durchgehendes Design • Standarddesign fürdie meisten Seiten: • Header, Menü,Inhalt, 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
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
Demo Seitenvorlagen (Master Pages)
Themes <%@ Page Theme=“Design"> Vorher: Nachher:
DataAccess PHP // Connect mysql_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 )
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(); } }
DataAccess PHP // Connect mysql_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 )
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
3-Tier Architektur • Strenge Trennung in: • Data Access Layer – Datenzugriff (Queries, ConnectionStrings, …) • Business Logic Layer – Implementierung der Geschäftsregeln • Presentation Layer – Visualisierung der Daten
Demo Data Binding
DataAccess PHP // Connect mysql_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 )
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: • Eingaben validieren! • 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"];
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
Membership-Provider Controls Login LoginStatus LoginView Andere Login- Controls Membership API (Benutzerverwaltung) Membership MembershipUser Membership Provider AccessMembershipProvider SqlMembershipProvider Andere Provider Benutzer- daten Access SQL Server Andere Datenquellen
Demo LogIn
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>
Sitemap-Provider Controls Menu TreeView SiteMap- DataSource SiteMapPath Site Navigation API SiteMap SiteMapNode SiteMapNode SiteMapNode Providers XmlSiteMapProvider Other Site Map Providers Site Maps Web.sitemap Other Data Stores
Demo SiteMap
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)
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"%>
SQL-Caching (Push) IIS Pubs Worker Process (ASP.NET Application) SQL-Server 2005 Notification Queue SQLCommand Table SQLDependency OnChange OnChange UPDATE INSERT DELETE Cache-Invalidierung Neu registrieren, wenn wieder benachrichtigt werden soll
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> VirtuelleURL Physische URL
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
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
Vielen Dank • Gibt es Fragen? • Gerne beantworte ich diese auch via Email an steffen.forkmann@msu-solutions.de! • Die Vortragsfolien können auf der Webseite http://www.navision-blog.de/ herunter geladen werden