Kontakt
DSVGO
Historie | |
13.08.2001 | Aktualisierung auf Win2000 (Hinweis von Toni Pohl) |
24.11.2000 | Erste Version |
Die Programmierung von ASP-Seiten erfolgt in einer Skript-Sprache. Schon dadurch gibt es aus Sicht des Software-Entwicklers einige Nachteile (s.a. VBScript - Unterschiede zu VB). Microsoft bietet mit der ActiveX-Technik eine Möglichkeit an, kompilierte Komponenten mit VB zu erstellen, welche in ASP-Seiten eingebunden werden können. So können alle Vorteile von Visual Basic genutzt werden.
Zuerst wird das typische Grundgerüst einer VB-Komponente für ASP vorgestellt. Dann wird die Realisierung anhand eines Beispiels verdeutlicht. Abschließend wird die Problematik der Distribution der erstellten Komponente erläutert.
Eine Komponente für den Einsatz unter IIS/ASP wird in VB folgenderweise erstellt und eingerichtet (hier die Beschreibung für die englischsprachige VB5-Version; ansonsten ist analog vorzugehen):
'ASP-Objekte: Private pApplication As ASPTypeLibrary.Application Private pRequest As ASPTypeLibrary.Request Private pResponse As ASPTypeLibrary.Response Private pServer As ASPTypeLibrary.Server Private pSession As ASPTypeLibrary.Session Private Sub InitASP() If pApplication Is Nothing Then 'Kontext feststellen: With GetObjectContext Set pApplication = .Item("Application") Set pRequest = .Item("Request") Set pResponse = .Item("Response") Set pServer = .Item("Server") Set pSession = .Item("Session") End With End If End SubDamit wird (falls noch nicht vorhanden) die Verbindung zwischen der VB-Komponente und IIS/ASP hergestellt.
<% Set ASPKlasse = Server.CreateObject("ASPKomponente.ASPKlasse") ASPKlasse.Methode %>
In dem nun folgenden Beispiel wird ein Taschenrechner als ASP-Komponente realisiert. Er soll etwa so aussehen:
Dazu muss der Code im oben gezeigten Klassenmodul um die Methode "Rechner" erweitert werden:Public Sub Rechner() Dim x As String Dim y As String Dim z As String InitASP 'Eingabe: With pRequest x = .Form("txtX") y = .Form("txtY") End With 'Berechnung: On Error Resume Next z = CStr(CDbl(x) * CDbl(y)) If Err Then z = "***" On Error GoTo 0 'Ausgabe: With pResponse .Write "<tt>" .Write "<form method=post>" .Write " <input name=txtX value='" & x & "' size=5>" .Write " <sup>x</sup>" .Write " <input name=txtY value='" & y & "' size=5>" .Write " <input type=submit value=' = '>" .Write " <big>" & z & "</big>" .Write "</form>" .Write "</tt>" End With End Sub
Nach erfolgreicher (Neu-)Kompilierung kann dieser "Taschenrechner" von ASP aus genutzt werden. Dazu genügt folgender Inhalt (hier absolut minimiert, aber voll funktionsfähig):
<% Server.CreateObject("ASPKomponente.ASPKlasse").Rechner %>
Wie man leicht erkennen kann, wird nur noch ein einzeiliges ASP-Skript zum Starten der VB-Komponente benötigt. Die eigentliche Entwicklung findet von nun an nur noch in der VB-Entwicklungsumgebung statt!
Erfolgt die Entwicklung einer Komponente nicht auf dem WebServer selbst, so muss diese z.B. mit dem Setup Wizard installiert werden.
Ist jedoch bereits irgendwann mal eine VB-Komponente auf dem WebServer installiert worden, so genügt ein einfaches Kopieren der kompilierten Komponente und ein anschließendes manuelles Registrieren.
Diese manuelle Registrierung erfolgt mit dem Befehl regsvr32, welchen man über die Shell ("Eingabeaufforderung") oder über "Start/Ausführen" absetzen kann. Soll z.B. die Komponente "ASPKomponente.dll" registriert werden, so genügt folgende Eingabe:
regsvr32 Pfad\ASPKomponente.dll
Soll ein Update einer VB-Komponente eingespielt werden, so kann dies im laufenden Betrieb des WebServers problematisch sein: Unter Umständen hat eine ASP-Seite irgendwann mal die alte Version der Komponente aufgerufen. Der WebServer behält die Komponente dann im Speicher, um sie eventuell wiederzuverwenden. Versucht man nun, diese Komponente zu entfernen bzw. eine neue Version einzuspielen, so erhält man u.U. folgende Meldung:
Dies kann übrigens auch dann passieren, wenn Sie auf dem WebServer selbst eine Komponente neu kompilieren möchten.
Um dieses Problem zu umgehen, muss der WebServer "runtergefahren" werden, damit er alle Komponenten wieder frei gibt. Dies geschieht via
net stop iisadmin
(in der Shell auszuführen). Dieser Vorgang dauert etwa 5 Sekunden. Wieder gestartet wird der WebServer mit
net start w3svc
(ebenfalls in der Shell auszuführen).
Daher sollte die Entwicklung einer Komponente nicht auf der Produktionsplattform erfolgen, sondern mittels "Personal Web Server" lokal auf dem Rechner des Entwicklers. In diesem Zusammenhang hat sich auch die folgende Batch als sehr hilfreich erwiesen:
net stop iisadmin /y net start w3svc
Die Option "y" sorgt dafür, dass keine störenden Sicherheitsabfragen erscheinen.
Sinnvollerweise legen Sie diese Batch auf dem Desktop oder im Start-Menü ab. Dann genügt bereits ein (Doppel-)Klick, um den WebServer runter und sofort wieder hoch zu fahren und damit alle geladenen Komponenten aus dem Speicher zu entfernen. Anschließend können Sie das Update Ihrer Komponente einspielen.
© Jost Schwider, 24.11.2000-11.07.2009 - http://vb-tec.de/asp_vb.htm