Verfügbarkeit von Objekten prüfen
Geschrieben von: Christian Koller 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:
SchlußbemerkungEinen 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. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
Debuggen von ASP Skripts - Teil 1 Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |