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