Geschrieben von: Christian Koller
Kategorie: Komponenten
This printed page brought to you by AlphaSierraPapa
Will man auf einem (fremden) Webserver ein bestimmtes Objekt in einer ASP-Seite verwenden, so muß die Objekt-Bibliothek, zu der das Objekt gehört, auf dem Internet Server installiert sein.
Ob nun ein Objekt tatsächlich in ASP zur Verfügung steht, prüft man am einfachsten indem man versucht das Objekt zu "instanzieren" - das heißt, eine Kopie des Objektes in einer Variable zu speichern. Wenn das Objekt sich nicht erstellen läßt, so ist es am Webserver nicht installiert, und damit auch in ASP-Seiten nicht verfügbar.
Man kann zum Beispiel prüfen, ob das ADO Stream Objekt (ProgID "ADODB.Stream") in ASP-Seiten am Server verwendet werden kann, indem man das folgende ASP-Script am Server laufen läßt:
<% @ Language="VBScript" %> <% Option Explicit %> <% ' Verschiedene Objekte werden mit IIS 4.0 mitgeliefert. ' Die Komponenten, deren ProgID im nachfolgenden ' Array eingetragen sind, werden automatisch getestet Dim theInstalledObjects(8) theInstalledObjects(0) = "MSWC.AdRotator" theInstalledObjects(1) = "MSWC.BrowserType" theInstalledObjects(2) = "MSWC.NextLink" theInstalledObjects(3) = "MSWC.Tools" theInstalledObjects(4) = "MSWC.Status" theInstalledObjects(5) = "MSWC.Counters" theInstalledObjects(6) = "MSWC.ContentRotator" theInstalledObjects(7) = "MSWC.PageCounter" theInstalledObjects(8) = "MSWC.PermissionChecker" Function IsObjInstalled(strClassString) On Error Resume Next ' Initialisiere Werte IsObjInstalled = False Err.Number = 0 ' Teste ob Objekt sich initiieren laesst Dim xTestObj Set xTestObj = Server.CreateObject(strClassString) If 0 = Err.Number Then IsObjInstalled = True End If Set xTestObj = Nothing Err.Number = 0 End Function %> <HTML> <HEAD> <TITLE>Test auf installierte Objekte</TITLE> </HEAD> <BODY> Geben Sie die ProgID oder ClassId einer Komponente ein um zu testen, ob sie am Server installiert ist. Wenn Sie das Textfeld leer lassen, so werden einige Standard-Komponenten getestet. <FORM action=<%=Request.ServerVariables("SCRIPT_NAME")%> method=post> <input type=text value="" name="classname" size=40> <INPUT type=submit value=Submit> <INPUT type=reset value=Reset> </FORM> <% Dim strClass strClass = Trim(Request.Form("classname")) If "" <> strClass then Response.Write strClass & " ist " If Not IsObjInstalled(strClass) then Response.Write "<strong>nicht installiert</strong>" Else Response.Write "installiert!" End If Response.Write "<P>" & vbCrLf Else ' Default: Liste von Komponenten die installiert sein koennten. %> <TABLE BORDER=0> <% Dim i For i=0 to UBound(theInstalledObjects) Response.Write "<TR><TD>" & theInstalledObjects(i) & "</TD><TD>" If Not IsObjInstalled(theInstalledObjects(i)) Then Response.Write "<strong>nicht installiert</strong>" Else Response.Write "installiert!" End If Response.Write "</TD></TR>" & vbCrLf Next %> </TABLE> <% End If %> </BODY> </HTML>
Dieses Script enthält die Funktion IsObjInstalled. Diese versucht mittles der Server.CreateObject Funktion, ein Objekt mit einer bestimmten ProgID (zB: "ADODB.Connection") zu erstellen und in einer Variablen zu speichern. Wenn dies nicht gelingt, so wird vom Programm ein Laufzeit-Fehler initiiert. Normalerweise führt so ein Laufzeitfehler zum Abbruch des Programmes, doch im vorhergehenden Skript verhindert der Befehl On Error Resume Next dies. Stattdessen läuft das Programm weiter, und im ASP Objekt Err stehen automatisch die Informationen darüber, ob und welcher Fehler aufgetreten ist.
Wenn kein Fehler beim Erstellen des Objektes aufgetaucht ist, so enthält die Number-Eigenschaft des Err-Objektes den Wert 0 und das Objekt wurde erfolgreich instanziert. Dadurch weiß das Programm, daß das Objekt in ASP-Seiten zur Verfügung steht und gibt eine entsprechende Meldung aus.
Das hier vorgestellte Skript testet standardmäßig für einige im Normalfall installierte Komponenten:
Einen Check kann dieses Skript leider nicht ausführen: ob ein Objekt mit Server.CreateObject erzeugt werden muß, oder ein einfacher Aufruf der VBScript Funktion CreateObject ausreichen würde - CreateObject ist nämlich deutlich schneller.
Was ist der Unterschied zwischen den beiden CreateObject's? Bestimmte Objekte (zB BrowserType) greifen auf die ASP Objekte zu, und diese werden bei Server.CreateObject mitgegeben. Ein Fehler (wegen fehlender ASP Objekte), tritt allerdings erst beim Aufruf einer Funktion/Eigenschaft auf, die diese ASP Objekte benötigen würde.
This printed page brought to you by AlphaSierraPapa
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000426.zip
Debuggen von ASP Skripts - Teil 1
http:/www.aspheute.com/artikel/20000818.htm
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.