Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Verfügbarkeit von Objekten prüfen

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:

Diese Liste kann im Array theInstalledObjects um gewünschte Objekte erweitert werden.

Schlußbemerkung

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

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000426.zip

Verwandte Artikel

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.