Was ist eigentlich ASP.NET?
Nach dem letzten Treffen des .NET-Stammtisch Konstanz-Kreuzlingen standen Peter, Thomas Huber und ich noch eine Weile zusammen und überlegten uns tatsächlich, was denn ASP.NET genau ist, bzw. was ASP.NET nun ausmacht.
Der Grund für die Diskussion war eine Bemerkung die Michael Schwarz während seines Vortrages über jQuery mehrfach fallengelassen habe. Genauer sagte er, er habe die ASP.NET MVP Auszeichnung komischerweise verliehen bekommen, ohne dass er mit ASP.NET arbeiten würde.
Ist das nun wirklich so oder war das nur eine provokante Äußerung gegen – aus seiner Sicht – einschränkende Features wie Web Server Controls, ViewState, UpdatePanels und Co.?
Je nachdem was nun ASP.NET ausmacht, kann die Frage so oder so beantwortet werden…
Uns dreien war bei der Überlegung klar, das es sich lediglich um eine provokante Bemerkung gehandelt hat. Nur wieso? Michael verzichtet – wie er sagt – auf serverseitiges, dynamisches rendern von HTML, genauso wie auf die typische Features von WebForms wie PostBack und ViewState. Alles dynamische HTML wird clientseitig per JavaScript erzeugt. Dynamische Daten werden per AJAX vom Server geholt und per JavaScript angezeigt.
Ist das dann noch ASP.NET? Die Seite, welche das JavaScript und das HTML-Grundgerüst bereitstellt, könnte dann auch eine einfache HTML-Seite sein, da sich an dieser Stelle keine serverseitige Logik verbirgt. Wo versteckt sich dann aber das ASP.NET?
Mir waren bisher vier Konzepte bekannt, wie ASP.NET genutzt wird. Schaut man sich diese Konzepte genauer an, haben sie eines gemeinsam:
- Web Forms: Dieses ist das ursprüngliche Konzept, wie es von Anfang an vorgesehen war. Die ASPX Seite bildet ein (Web) Form, welches mit Controls aller Art bestückt werden kann. Die Abarbeitung der Seite erfolgt in der Regel von einem Event zum nächsten.
- Web Services: Die klassischen XML Web Services wurden zur gleichen Zeit wie die Web Forms vom Framework bereitgestellt. Auch Web Services funktionieren nach dem klassischen “Client-Server”-Prinzip: Der Client sendet eine Anfrage (Web Method Aufruf) an den Server und erhält eine Antwort. Statt HTML wird aber XML übertragen.
- ASP.NET MVC: MVC ist das neueste Konzept um dynamische Webseiten zu erzeugen. Es werden nicht mehr hauptsächlich Events abgearbeitet, sondern Controller Aktionen versorgen die Views (ASPX-Dateien) mit Informationen (Models) die dann in den Views angezeigt werden oder zur ANzeigesteuerung genutzt werden. PostBack und ViewState gibt es nicht mehr. Ein PostBack ist nur noch ein klassischer POST der selber verarbeitet werden muss.
- sharpcms-Konzept: (Ein richtiger Name fällt mir dazu im Moment nicht ein) Hierbei handelt es sich um ein komplett anderes Konzept. Die Ausgabe der Daten die im XML-Format vorliegen wird per XSLT gesteuert. Die Ausgabe ist daher flexibel und kann von HTML, über WordML bis hin zu PostScript reichen. Das einzige was hier ASP.NET ist, ist der HttpHandler der die Anfragen verarbeitet, die XML-Daten transformiert und das Resultat an den Client sendet
Die Gemeinsamkeit aller vier Konzepte ist das Interface IHttpHandler. Alle Anfragen werden also über einen HttpHandler verarbeitet. Handelt es sich also dann um ASP.NET wenn eine Anfrage vom Client, am Server über einen HttpHandler verarbeitet wird? Es scheint fast so.
Mehr zu HttpHandlern:
Daten mit ASP.NET zum Client schicken, oder: Wieso eigentlich HttpHandler?
HttpHandler der besonderen Art - Page Handler
Exemplarische Vorgehensweise: Erstellen eines synchronen HTTP-Handlers
Schaut man sich das Konzept von Michael genauer an, kann es tatsächlich unabhängig von ASP.NET funktionieren. Wichtig ist nur, dass irgendwie per Ajax Daten vom Server geholt werden können. Dabei ist es eigentlich egal, wie und mit welcher Technik die Daten serverseitig bereitgestellt werden.
O-Ton Peter Bucher:
Alle oben genannten Konzepte beruhen auf der Grundlage von ASP.NET, die beim Webserver, genauer dem ISAPI-Modul von ASP.NET anfangen.
Es besteht eine Applikation und Endpoints (Handler), die einfach verschieden genutzt werden.
WebForms implementiert einen IHttpHandler der sich „Page“ nennt und ermöglicht es mit intelligenten Konzepten eine Controlhierarchie, Events und vieles mehr zu haben.
Webservices stellen auch nur einen Entpoint mithilfe eines HttpHandlers zur Verfügung, die Daten in einem geeigneten Format an den Client schicken. Sie nutzen also die weiter oben gelegenen Features von WebForms nicht, macht ja auch keinen Sinn.
ASP.NET MVC hingegen setzt nutzt sehr viel vom Kern von ASP.NET, lässt hierbei aber die Klasse Page und die Controls aus dem Spiel, sowie die Konzepte die damit zusammenhängen (Events, View- Controlstate, etc...).
Es gibt einen Handler der alle Anfragen entgegen nimmt und dann intern einer Klasse / Methode zuweist. Intern besteht also ein anderes Konzept, dass allerdings – genau so wie mit Events – auch ein Einhängen in den Zyklus erlauben. Wenn auch auf eine viel simplere und transparentere Art und Weise (Actionfilter / AOP).
Um mehr zu erfahren was unter der Haube von ASP.NET abgeht, könnt ihr den Artikel von Rick Strahl lesen.
Programmiert man nun allerdings gerne mit C# und stellt man die Daten deswegen – der Einfachheit halber – per HttpHandler zur Verfügung, so basiert dieses Konzept – nach obiger Definition – ebenfalls auf ASP.NET. Genau so sah das Beispiel in Michaels Vortrag nämlich aus ;-)
Michael hat seine MVP Auszeichnung als somit zurecht ;-)
Update 23.04.2009:
Hier ist übrigens Michaels Beitrag zu dem Thema zu finden:
http://michael-schwarz.blogspot.com/2009/04/was-ist-eigentlich-aspnet.html