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.