ASPError-Objekt |
Das mit ASP 3.0 eingeführte integrierte Objekt ASPError ermöglicht die Anzeige ausführlicher Informationen über den zuletzt im Skript einer ASP-Seite aufgetretenen Fehler der aktuellen Sitzung. Mit seinen neun schreibgeschützten Eigenschaften bietet dieses Objekt ausführlichere Informationen über die Art und Quelle von Fehlern als das Err-Objekt in VBScript. Zur Verwendung des Objekts ASPError und seiner Eigenschaften müssen Sie GetLastError, eine neue Methode des Server-Objekts, aufrufen. Diese gibt ein ASPErrorObject zurück, dessen Eigenschaftswerte Rückschlüsse auf den zuletzt im Skript aufgetretenen Fehler zulassen:
    Dim objMyASPError
    Set objMyASPError = Server.GetLastError
Wenn Sie IIS 5.0 installieren, bewirken standardmäßig alle Vorverarbeitungs-, Skript- und Laufzeitfehler im ASP-Code, dass IIS die Verarbeitung des aktuellen Skripts beendet und dessen Ausführung an eine benutzerdefinierte Fehlerseite namens 500-100.ASP weiterleitet. Diese Weiterleitung erfolgt über einen internen Aufruf der Methode Server.Transfer, die, wie in Kapitel 9 erläutert, die Ausführung von einem Skript auf ein anderes verschiebt und dabei alle im ersten Skript vorhandenen Statusinformationen schützt. Das Skript 500-100.ASP (das sich standardmäßig im Verzeichnis C:\WINNT\Help\iisHelp\common befindet) enthält einen Aufruf der Methode Server.GetLastError. Wenn dieses Skript ausgeführt wird, formatiert es die aktuellen Eigenschaftswerte des ASPError-Objekts, das von diesem Aufruf der Methode GetLastError zurückgegeben wird, und zeigt sie an. Sie können die Standardfehlerseite 500-100.ASP unverändert übernehmen, sie an das Erscheinungsbild Ihrer Site anpassen oder IIS mit dem Internet Services Manager-SnapIn zu einer Seite Ihrer Wahl umleiten (siehe Anhang D). Im nachfolgenden Feld finden Sie eine Beschreibung der Eigenschaften, Kollektionen, Methoden und Ereignisse des Objekts ASPError.

Anmerkungen/Fehlerbehebung |
Um das Debugging ihrer Skripts mit dem Objekt Err in VBScript zu aktivieren, verwenden die weniger erfahrenen ASP-Entwickler häufig den folgenden Code:
    On Error Resume Next
Diese Codezeile im Skript bewirkt, dass IIS nur bei Vorverarbeitungs- und Skriptfehlern (Syntax) die Methode Server.Transfer aufruft und die Skriptausführung an Ihr 500-100.ASP-Skript (bzw. ein benutzerdefiniertes Fehlerbehandlungsskript) weiterleitet. Bei Laufzeitfehlern leitet IIS die Verarbeitung nicht an 500-100.ASP weiter. So wird der Fehler im folgenden Block bei Verwendung dieser Debugging-Codezeile nicht unbedingt abgefangen:
    Dim intCounter
    For intCounter = 1 to 100
         intResult = intCounter / (intCounter - 100)
    Next
In diesem Codefragment müsste zusätzlicher Code zum Abfangen des Fehlers vor die Next-Anweisung eingefügt werden. Der Fehler, eine Division durch Null, tritt auf, sobald intCounter 100 beträgt. Das Hinzufügen solcher Zeilen zum Erkennen von Fehlern im gesamten Code ist nicht nur zeitaufwändig, sondern auch an sich fehleranfällig, da die fehlergefährdeten Zeilen schon vorab als solche identifiziert werden müssen. Aus diesem Grund und weil das Objekt ASPError mehr Informationen liefert als das Err-Objekt, sollte On Error Resume Next wenn möglich vermieden werden. Die ASPError-Objektseite 500-100.ASP (bzw. ähnliche, benutzerdefinierte Fehlersucheskripts) eignet sich außerdem ausgezeichnet zur Behandlung von Fehlern, die in öffentlich verfügbaren Sites auftreten. Sie könnten das Skript 500-100.ASP beispielsweise so anpassen, dass es das Farbschema und den Hintergrund Ihrer Site aufweist und eine Hilfe-Telefonnummer enthält, über die der Benutzer, bei dem das Problem auftritt, Rat erfragen kann. Wenn Sie die größere Vielfalt und Ausführlichkeit der Informationen nutzen, um die das ASPError-Objekt das Skript 500-100.ASP ergänzen kann, lassen sich Anrufe vom Support-Personal zusätzlich effektiver bearbeiten. Darüber hinaus könnten Sie Fehlerbenachrichtigungen mit dem Skript 500-100.ASP sozusagen "im Hintergrund“ an das zuständige Personal leiten und die Einzelheiten des Fehlers vor dem Endbenutzer zu verbergen. Eine solche Version von 500-100.ASP würde lediglich anzeigen, dass ein Fehler aufgetreten ist und der Benutzer den gewünschten Vorgang später erneut versuchen soll, während im Hintergrund eine Fehler-E-Mail zum Support-Personal gesendet wird. Am Ende dieses Kapitels finden Sie ein Beispielskript, das diese Funktionen ausführt. In den Codebeispielen zur Veranschaulichung der Eigenschaften des ASPError-Objekts kommen drei unterschiedliche Fehlergenerierungsskripts zum Einsatz. Das erste enthält einen Syntaxfehler, das zweite einen Fehler in einer Vorverarbeitungsdirektive und das dritte generiert einen Laufzeitfehler. In allen Beispielen werden dieselben drei ASP-Seiten zur Fehlergenerierung verwendet. Es ändert sich lediglich der Inhalt der benutzerdefinierten Fehlerseite 500-100.ASP, wodurch die spezielle Eigenschaft veranschaulicht wird. Die folgenden drei ASP-Seiten lösen die Fehler aus:
    **** BEGIN Error Generating Script #1 ****
    <HTML>
    <HEAD><TITLE>
    Error Generation Page #1
    </TITLE></HEAD>
    <BODY>
    <%
    ' This page contains a syntax error.
    ' In the following For...Next loop, the keyword
    ' "For" is mispelled.
    Dim intCounter
    Fir intCounter = 1 to 100
    %>
    Look everyone! I'm counting: <%=intCounter%><BR>
    <%
    Next
    %>
    </BODY>
    </HTML>
    **** END Error Generating Script #1 ****

    **** BEGIN Error Generating Script #2 ****
    <HTML>
    <HEAD><TITLE>
    Error Generation Page #2
    </TITLE></HEAD>
    <BODY>
    <%
    ' This page contains a preprocessing error.
    ' The work "file" in the #INCLUDE preprocessor
    ' directive is mispelled:
    %>
    <!--#include fil=/headers/AdminHeader.INC -->
    </BODY>
    </HTML>
    **** END Error Generating Script #2 ****

    **** BEGIN Error Generating Script #3 ****
    <HTML>
    <HEAD><TITLE>
    Error Generation Page #3
    </TITLE></HEAD>
    <BODY>
    <%
    ' This page contains a runtime error.
    ' In the following For...Next loop, when the
    ' intCounter variable gets to zero, the result
    ' is a divide by zero error.
    Dim intCounter
    Dim dblDivResult
    For intCounter = 1 to 100
         dblDivResult = intCounter / (intCounter - 100)
    %>
    Look everyone! I'm dividing: <%=dblDivResult%><BR>
    <%
    Next
    %>
    </BODY>
    </HTML>
    **** END Error Generating Script #3 ****

ASPCode |
objASPError.ASPCode
Die Eigenschaft ASPCode enthält einen numerischen Code, der den ASP-spezifischen Fehler aus dem Fehlergenerierungsskript darstellt. Wenn der Fehler bei der Verarbeitung des ASP-Skripts aufgetreten ist, wird diese Eigenschaft von IIS angegeben. Die Eigenschaft ASPCode ist schreibgeschützt.
Parameter
Keine
Beispiel
In diesem Beispiel wird davon ausgegangen, dass der folgende Code dem benutzerdefinierten Standard-Fehlerskript 500-100.ASP hinzugefügt wurde und die drei am Ende des Abschnitts "Anmerkungen/Fehlerbehebung“ aufgeführten Skripts zur Generierung von Fehlern eingesetzt werden, die es aufrufen:
    **** BEGIN ASPCode Example Script ****
    <%
    ' This script demonstrates the use of the ASPCode
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the ASPCode property is " & objMyASPError.ASPCode
    %>
    **** END ASPCode Example Script ****
Wenn die Fehlergenerierungsskripts ausgeführt werden, erzeugt das obige Beispielskript die folgenden drei Antworten: Fehlergenerierungsskript Nr. 1:
    The value of the ASPCode property is [EMPTY]
Fehlergenerierungsskript Nr. 2:
    The value of the ASPCode property is ASP 0128
Fehlergenerierungsskript Nr. 3:
    The value of the ASPCode property is [EMPTY]
Hinweis
Wie zuvor erwähnt, wird die Eigenschaft ASPCode nur angegeben, wenn der Fehler bei der Interpretation des ASP-Skripts selbst auftritt. Dies bezieht sich auf alle Vorverarbeitungsdirektiven.

ASPDescription |
objASPError.ASPDescription
Die Eigenschaft ASPDescription ist ein Stringwert, den IIS beim Auftreten eines ASP-Fehlers angibt. Sie liefert mehr beschreibende Informationen über die Art des aufgetretenen ASP-Fehlers als die Eigenschaft ASPCode. Ebenso wie die Eigenschaft ASPCode wird auch ASPDescription nur im Fall von Fehlern bei der Interpretation eines ASP-Skripts angegeben und nicht bei Laufzeitfehlern.
Parameter
Keine
Beispiel
Dieses Beispiel beruht auf den am Ende des Abschnitts "Anmerkungen/Fehlerbehebung“ aufgeführten Fehlergenerierungsskripts. Dabei wird vorausgesetzt, dass dem benutzerdefinierten Standardfehlerskript 500-100.ASP der folgende Code hinzugefügt wurde:
    **** BEGIN ASPDescription Example Script ****
    <%
    ' This script demonstrates the use of the ASPDescription
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the ASPDescription property is " & _
         objMyASPError.ASPDescription
    %>
    **** END ASPDescription Example Script ****
Wenn die Fehlergenerierungsskripts ausgeführt werden, erzeugt das obige ASPDescription-Skript die folgenden drei Antworten: Fehlergenerierungsskript Nr. 1:
    The value of the ASPDescription property is [EMPTY]
Fehlergenerierungsskript Nr. 2:
    The value of the ASPDescription property is The Include file name must be
    specified using either the File or Virtual attribute.
Fehlergenerierungsskript Nr. 3:
    The value of the ASPDescription property is [EMPTY]
Hinweis
Wie ASPCode ist auch die Eigenschaft ASPDescription nur im Fall von Fehlern bei der ASP-Interpretation nützlich. Die Eigenschaft Description des Objekts ASPError gibt fast immer dieselbe oder sogar bessere Auskunft über den zuletzt aufgetretenen Fehler.

Category |
objASPError.Category
Die Eigenschaft Category enthält einen String, der die Art des aufgetretenen Fehlers angibt: IIS-spezifisch, skriptsprachenspezifisch oder komponentenspezifisch.
Parameter
Keine
Beispiel
Dieses Beispiel beruht auf den am Ende des Abschnitts "Anmerkungen/Fehlerbehebung“ aufgeführten Fehlergenerierungsskripts. Dabei wird vorausgesetzt, dass dem benutzerdefinierten Standardfehlerskript 500-100.ASP der folgende Beispielcode hinzugefügt wurde:
    **** BEGIN Category Example Script ****
    <%
    ' This script demonstrates the use of the Category
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the Category property is " & objMyASPError.Category
    %>
    **** END Category Example Script ****
Wenn die Fehlergenerierungsskripts ausgeführt werden, erzeugt dieses Skript die folgenden drei Antworten: Fehlergenerierungsskript Nr. 1:
    The value of the Category property is Microsoft VBScript compilation
Fehlergenerierungsskript Nr. 2:
    The value of the Category property is Active Server Pages
Fehlergenerierungsskript Nr. 3:
    The value of the Category property is Microsoft VBScript runtime
Hinweis
Die Eigenschaft Category ermöglicht es, den Bereich für die Fehlersuche einzuengen.

Column |
objASPError.Column
Die Eigenschaft Column enthält einen Long-Wert, der die Zeichenspalte angibt, in der sich das erste Zeichen des den Fehler verursachenden Codes befindet.
Parameter
Keine
Beispiel
Dieses Beispiel beruht auf den am Ende des Abschnitts "Anmerkungen/Fehlerbehebung“ aufgeführten Fehlergenerierungsskripts. Dabei wird vorausgesetzt, dass dem benutzerdefinierten Standardfehlerskript 500-100.ASP der folgende Code hinzugefügt wurde:
    **** BEGIN Column Example Script ****
    <%
    ' This script demonstrates the use of the Column
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the Column property is " & objMyASPError.Column
    %>
    **** END Column Example Script ****
Wenn die Fehlergenerierungsskripts ausgeführt werden, erzeugt das obige Column-Skript die folgenden drei Antworten: Fehlergenerierungsskript Nr. 1:
    The value of the Column property is 19
Fehlergenerierungsskript Nr. 2:
    The value of the Column property is -1
Fehlergenerierungsskript Nr. 3:
    The value of the Column property is -1
Hinweis
Die Eigenschaft Column erleichtert das Auffinden fehlerhafter Syntax im Code. Wenn es sich aber um einen ASP-spezifischen Fehler handelt oder der Bereich, in dem der Fehler entsteht, keinen syntaktisch falschen Code enthält, dann beträgt dieser Wert -1 und ist damit nicht sonderlich hilfreich.

Beschreibung |
objASPError.Description
Die Eigenschaft Description ist ein String, der den zuletzt aufgetretenen Fehler beschreibt. Außer im Fall von Fehlern in Bezug auf die ASP-Interpretation ist sie in der Regel beschreibender und hilfreicher als die ihr ähnliche Eigenschaft ASPDescription.
Parameter
Keine
Beispiel
Dieses Beispiel beruht auf den am Ende des Abschnitts "Anmerkungen/Fehlerbehebung“ aufgeführten Fehlergenerierungsskripts. Dabei wird vorausgesetzt, dass dem benutzerdefinierten Standardfehlerskript 500-100.ASP der folgende Code hinzugefügt wurde:
    **** BEGIN Description Example Script ****
    <%
    ' This script demonstrates the use of the Description
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the Description property is " & objMyASPError.Description
    %>
    **** END Description Example Script ****
Wenn die Fehlergenerierungsskripts ausgeführt werden, erzeugt das obige Description-Skript die folgenden drei Antworten: Fehlergenerierungsskript Nr. 1:
    The value of the Description property is Expected end of statement
Fehlergenerierungsskript Nr. 2:
    The value of the Description property is Missing File or Virtual attribute
Fehlergenerierungsskript Nr. 3:
    The value of the Description property is Division by zero
Hinweis
Der Wert der Eigenschaft Description ist normalerweise beschreibender als die übrigen Eigenschaften des ASPError-Objekts. Wie aber alle anderen Eigenschaften auch, hat sie für die Endbenutzer Ihrer ASP-Anwendung nur einen sehr geringen Nutzen. Es ist aber wichtig, dass angezeigte Informationen über die Ursachen von Fehlern den Benutzern auch wirklich weiterhelfen. Am Ende dieses Kapitels finden Sie ein Beispiel für ein benutzerdefiniertes 500-100.ASP-Skript, mit dem harmlose Fehlerinformationen angezeigt und dem Programmierer des Skripts zugleich nützliche Informationen zur Verfügung gestellt werden können.

File |
objASPError.File
Die Eigenschaft File enthält den vollständigen Pfad zur Datei mit dem Code, der den Fehler verursacht hat. Der Dateiname enthält den vollständigen Pfad der Datei in Relation zum Web-Stammordner.
Parameter
Keine
Beispiel
Dieses Beispiel beruht auf den am Ende des Abschnitts "Anmerkungen/Fehlerbehebung“ aufgeführten Fehlergenerierungsskripts. Dabei wird vorausgesetzt, dass dem benutzerdefinierten Standardfehlerskript 500-100.ASP der folgende Code hinzugefügt wurde:
    **** BEGIN File Example Script ****
    <%
    ' This script demonstrates the use of the File
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the File property is " & objMyASPError.File
    %>
    **** END File Example Script ****
Wenn die Fehlergenerierungsskripts ausgeführt werden, erzeugt das obige File-Skript die folgenden drei Antworten: Fehlergenerierungsskript Nr. 1:
    The value of the File property is /errorgen1.asp
Fehlergenerierungsskript Nr. 2:
    The value of the File property is /errorgen2.asp
Fehlergenerierungsskript Nr. 3:
    The value of the File property is /errorgen3.asp
Hinweis
Beachten Sie, dass der Dateipfad nicht etwa vom Stammordner der aktuellen Anwendung, sondern von demjenigen des Webservers ausgeht.

Line |
objASPError.Line
Die Eigenschaft Line ist ein Long-Wert, der die Nummer der Zeile angibt, in der sich der den Fehler verursachende Code befindet.
Parameter
Keine
Beispiel
Dieses Beispiel beruht auf den am Ende des Abschnitts "Anmerkungen/Fehlerbehebung“ aufgeführten Fehlergenerierungsskripts. Dabei wird vorausgesetzt, dass dem benutzerdefinierten Standardfehlerskript 500-100.ASP der folgende Code hinzugefügt wurde:
    **** BEGIN Line Example Script ****
    <%
    ' This script demonstrates the use of the Line
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the Line property is " & objMyASPError.Line
    %>
    **** END Line Example Script ****
Wenn die Fehlergenerierungsskripts ausgeführt werden, erzeugt das obige Line-Skript die folgenden drei Antworten: Fehlergenerierungsskript Nr. 1:
    The value of the Line property is 11
Fehlergenerierungsskript Nr. 2:
    The value of the Line property is 11
Fehlergenerierungsskript Nr. 3:
    The value of the Line property is 14
Hinweis
Die Zeilenzählung beginnt mit 1 bei der ersten Zeile des ASP-Codes.

Number |
objASPError.Number
Die Eigenschaft Number enthält einen Long-Wert, der einen von einer COM-Komponente zurückgegebenen Fehlercode darstellt. Dieser Long-Wert ist ein COM-Standardfehlercode.
Parameter
Keine
Beispiel
Dieses Beispiel beruht auf den am Ende des Abschnitts "Anmerkungen/Fehlerbehebung“ aufgeführten Fehlergenerierungsskripts. Dabei wird vorausgesetzt, dass dem benutzerdefinierten Standardfehlerskript 500-100.ASP der folgende Code hinzugefügt wurde:
    **** BEGIN Number Example Script ****
    <%
    ' This script demonstrates the use of the Number
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the Number property is " & objMyASPError.Number
    %>
    **** END Number Example Script ****
Bei Ausführung der Fehlergenerierungsskripts werden die folgenden drei Antworten erzeugt: Fehlergenerierungsskript Nr. 1:
    The value of the Number property is -2146827263
Fehlergenerierungsskript Nr. 2:
    The value of the Number property is -2147467259
Fehlergenerierungsskript Nr. 3:
    The value of the Number property is -2146828277
Hinweis
Keine

Source |
objASPError.Source
Die Eigenschaft Source ist ein String mit der Codezeile, die den letzten Fehler verursacht hat, sofern dieser Code einen Syntaxfehler enthält.
Parameter
Keine
Beispiel
Dieses Beispiel beruht auf den am Ende des Abschnitts "Anmerkungen/Fehlerbehebung“ aufgeführten Fehlergenerierungsskripts. Dabei wird vorausgesetzt, dass dem benutzerdefinierten Standardfehlerskript 500-100.ASP der folgende Code hinzugefügt wurde:
    **** BEGIN Source Example Script ****
    <%
    ' This script demonstrates the use of the Source
    ' property of the ASPError object.
    Dim objMyASPError

    Set objMyASPError = Server.GetLastError( )

    Response.Write "The value of the Source property is " & objMyASPError.Source

    %>
    **** END Source Example Script ****
Wenn die Fehlergenerierungsskripts ausgeführt werden, erzeugt das obige Source-Skript die folgenden drei Antworten: Fehlergenerierungsskript Nr. 1:
    The value of the Source property is Fir intCounter = 1 to 100
Fehlergenerierungsskript Nr. 2:
    The value of the Source property is [EMPTY]
Fehlergenerierungsskript Nr. 3:
    The value of the Source property is [EMPTY]
Hinweis
Wie bereits erwähnt, ist die Eigenschaft Source nur bei Fehlern in Bezug auf die Syntax nützlich. Anderenfalls bleibt diese Eigenschaft leer.