DevTrain

Autor: Hannes Preishuber

Portierung von ASP auf ASP.NET

Beim Umstieg von ASP 2.0 (IIS 4) auf ASP 3.0 hat man fast nichts gemerkt. Die Anwendungen sind schneller gelaufen und ein paar Befehle sind dazu gekommen. Der Entwickler hatte nichts zu tun. Das kann doch nicht sein, da sind doch bald alle arbeitslos mag sich Bill Gates gedacht haben und hat uns ASP.NET präsentiert.

Wer jetzt vor der Aufgabe steht, oder es aus purem Leichtsinn tun will, eine ASP Anwendung umzustellen, den möchte ich hier ein paar Tipps an die Hand geben.

Zunächst lässt sich ein Visual Interdev 6.0 Projekt mit Visual Studio .NET problemlos öffnen. Allerdings wird nur die Projekt Datei migriert und sonst nix. Der Einfachheit halber gehen wir von VB Script auf der Serverseite aus. Bei Jscript ändert sich die Lage dramatisch. So ist JScript Case Sensitiv (HTMLEncode wird HtmlEncode). Ich gehe aber davon aus, das die wenigsten das getan hat. Obwohl Microsoft seine eigenen Seiten ausschließlich mit Jscript (auch am Server) entwickelt.

Schritt 1: öffnen Projekt

Die SLN Datei wird geöffnet. Es erscheint in der Taskliste eine Reihe von Hinweisen, die aber vorerst ohne Relevanz sind.

Achtung eine Rückabwicklung ist nicht möglich. Das heißt Sicherheitskopie machen! Bei meiner Maschine kommt eine Fehlermeldung:

Application for the project type *.vip is not installed

Leider lässt sich der Grund nicht eruieren, so dass ich manuell ein neues Projekt anlege und die ASP Dateien per VS .NET hinzufüge.

Schritt 2: umbennen in ASPX

So zunächst benennen wir einfach eine Datei in ASPX um.  Wenn in der Form Action die eigene Seite drinnen steht muss logischerweise dort auch die Änderung auf ASPX vorgenommen werden.
<FORM action="" method=post id=form1 name=form1>

Da VBScript sehr ähnlich mit VB .NET ist, laufen viele Seiten schon ab jetzt.

Schritt 3: Klammern setzen

Alle Aufrufe von Prozeduren (= Funktionen ohne Rückgabe) müssen in Klammern gesetzt werden. Ein typisches Beispiel ist
Response.write("Test").

Schritt 4: Deklarieren von Variablen

Das nächste was auffällt ist, das Variablen deklariert sein müssen.(Option Strict)Also dim my as String. Das ist eigentlich nicht schlecht, steht aber offensichtlich anders in der Doku. Was Funktioniert ist ein reines DIM ohne Typ. Aber Empfehlung ist, alles Variablen richtig deklarieren. 

Schritt 5: Objektzuweisungen per SET ersetzen

Wenn Sie auf Datenbanken zugreifen werden Sie dies über ADO tun. Dazu muss das Objekt mit Server.CreateObject instanziert werden. Das winzige Wort Set am Anfang der Zeile muss jetzt raus.
set rs = Server.CreateObject("ADODB.Recordset")

Schritt 6:Ausprobieren voller Freude und folgendes erhalten:

The component 'ADODB.Connection' cannot be created. Apartment threaded components can only be created on pages with an <%@ Page aspcompat=true %> page directive.

Es geht also doch noch nicht. Dann kommen wir doch der Aufforderung nach und setzen das Attribut aspcompat in die ( noch nicht vorhandene) Page Direktive. Denken Sie daran, das dies in der ersten Zeile stehen muss.

Jetzt funktionierts!

Schritt 7: Standardeigenschaften hinzufügen

Doch noch nicht richtig, denn die beliebten Standardeigenschaften existieren so nicht mehr. Ein rs.fields("name") erzeugt auf den ersten Blick verwunderliche Ergebnisse.

Also überall die entsprechende Eigenschaft anhängen z.B. rs.fields("name").Value

An dieser Stelle habe ich eine kleinen nicht wissenschaftlich fundierten Test gemacht. Code der in ASP ca. 5 sec gebraucht hat, braucht jetzt 6 sec. Aber wir können in Punkt Performance noch einige tun. Siehe nächste Schritte.

Schritt 8: Wrapperobjekte bauen

Zwar funktioniert der Zugriff per Late Binding, aber nicht mit max. Performance. Wesentlich besser ( aber noch nicht max) geht es wenn ein COM Objekt in das .NET Framework importiert wird. Dazu gibt es das Tool tlbimp. Damit erzeugen Sie eine neue DLL die dann in das BIN Verzeichnis der Applikation kopiert wird. Da es sich dann um ein Managed Code und ein Assemply handelt kann dann über new das Object per early Bindung eingebunden werden
dim my = new ADODB...

Beim Datenzugriff kann ich das nur bedingt empfehlen, da dann ein Umbau auf ADO .NET gleich zu empfehlen ist. Siehe Schritt 12.

Schritt 9: Sonderbefehle eliminieren

Einige Befehle finden sich in VB nicht mehr in gewohnter Form. So bin ich über die Date() oder Time() Funktion gestolpert die jetzt durch Date.Now().tostring ersetzt werden kann. Auch die RND Funktion wird man vergebens suchen. Renderfunctions müssen in Scriptblöcke gesetzt werden.

Schritt 10: Eventhandling ASP.NET Like umbauen

Um das Eventmodell von ASP .NET zu bekommen müssen alle HTML Elemente den Zusatz runat="server" als Attribut bekommen. Auch das Formular an sich. Damit kann dann wesentlich einfacher auf das Formular zugegriffen werden.

Schritt 11: Ausgaben in Labels platzieren

Jedes Feedback an den Benutzer lässt sich mit Labels platzieren. Das Response.write sollte dafür an den meisten Stellen wegfallen.

Schritt 12: Umstieg auf ADO.NET

Dies ist wahrscheinlich einer der härtesten Schnitte. Da ADO und ADO .NET sehr unterschiedlich sind, ist genau abzuwägen ob dies zu tun ist. Es kann durchaus weniger Aufwand sein, die Seite komplett neu machen. Wer aber schon bis hierher den Portierungsweg gegangen ist, kann unter Umständen hier sinnvoll weitermachen.

Schritt xx: Redesign der Oberfläche

Jetzt ist es soweit, das dank Trennung von Code und Design, die Features von ASP.NET genutzt werden können. Ein Redesign der ASPX Seiten hat nun keine (oder wenig) Auswirkung auf die Funktion der Applikation. So können neue Controls wie der Kalender genutzt werden.

Performance Blinzler ( Betrachtung wäre übertrieben)

Wie steht es eigentlich mit der Geschwindigkeit jetzt? Ein direkter Vergleich ist schlicht unmöglich. ASP.NET Anwendungen lassen sich schlicht besser skalieren und sind damit im Zweifel immer schneller. Trotzdem habe ich obige Aufgabe pur mit ASP NET geschrieben um den Vergleich doch zu bekommen. Ergebnis 4 Sekunden. Also in der Dimension ähnlich.

 

Dieser Text bezieht sich auf die BETA2 des .NET Frameworks.


Erfasst am: 29.08.2001 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=599
© Copyright 2003 ppedv AG - http://www.ppedv.de