Steffen Forkmann, msu solutions GmbH 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? Viele Demos der neuen Features 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
Weitere Funktionalität 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 “Event Handler”-Code 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 Daten- controls Login- controls Web Parts Andere neue Controls Controls MasterPages Themes und Skins Lokalisation Kompilierung Framework Page Benutzer- verwaltung Rollen- verwaltung Profile Konfiguration Services und APIs 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
Visual Web Developer 2005 Kostenloser Download als Express-Version: www.microsoft.com/germany/msdn/vstudio/express/vwd/default.mspx
Konfiguration Administrative Tools machine.config web.config ASP.NET MMC snap-in Web Site Administration Tool (Webadmin.axd) machine.config Systemweite Standard-Einstellungen web.config Projektspezifische Einstellungen Configuration API
web.config XML-Konfigurationsfile System.Web UI Design WebControls HtmlControls Services Configuration Description Discovery Protocols Caching Hosting Mail SessionState
Durchgehendes Design Standarddesign für die meisten Seiten: Header, Menü, Inhalt, Footer Footer Inhalt Header Navigation
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
Seitenvorlagen (Master Pages) Demo Seitenvorlagen (Master Pages)
Themes <%@ Page Theme=“Design"> Vorher: Nachher:
DataAccess PHP Es geht auch besser! (auch in 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 Es geht auch besser! (auch in 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 Es geht auch besser! (auch in 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 Membership API (Benutzerverwaltung) 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 Site Navigation API Providers Site Maps 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: Lösung: SQL Caching 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"%>
Neu registrieren, wenn wieder benachrichtigt werden soll 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> Virtuelle URL 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 OpenBook http://www.galileocomputing.de/openbook/asp/ 3-tier Architecture with ASP.NET 2.0 http://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