it-swarm.com.de

Ist eine Try-Catch-ähnliche Fehlerbehandlung in ASP Classic möglich?

Welche Optionen gibt es in ASP Classic für die Fehlerbehandlung?

Beispielsweise:

Ich benutze die Mail.SendMail funktioniert aber beim Einschalten des Testservers nicht, was normal ist. Ich möchte testen, ob Mailing möglich ist, wenn nicht, dann fortfahren und/oder eine Nachricht anzeigen.

Irgendwelche Ideen?

37
Sander Versluys

Es gibt zwei Ansätze, Sie können in JScript oder VBScript codieren, die das Konstrukt haben, oder Sie können es in Ihrem Code verwischen.

Mit JScript würden Sie den folgenden Konstruktionstyp verwenden:

<script language="jscript" runat="server">
try  {
    tryStatements
}
catch(exception) {
    catchStatements
}
finally {
    finallyStatements
}
</script>

In Ihrem ASP Code fudgen Sie es, indem Sie bei Fehlern den nächsten Versuch fortsetzen und err.Number an dem Punkt überprüfen, an dem ein Fang stattfindet, wie:

<%
' Turn off error Handling
On Error Resume Next


'Code here that you want to catch errors from

' Error Handler
If Err.Number <> 0 Then
   ' Error Occurred - Trap it
   On Error Goto 0 ' Turn error handling back on for errors in your handling block
   ' Code to cope with the error here
End If
On Error Goto 0 ' Reset error handling.

%>
48
Wolfwyrd

In Bezug auf Wolfwyrds Antwort: "On Error Resume Next" deaktiviert tatsächlich die Fehlerbehandlung! Nicht auf. On Error Goto 0 schaltet die Fehlerbehandlung wieder auf ON, da die Maschine sie zumindest abfangen soll, wenn wir sie nicht selbst geschrieben haben. Aus = Überlassen Sie es Ihnen, damit umzugehen.

Wenn Sie On Error Resume Next verwenden, müssen Sie darauf achten, wie viel Code Sie danach einfügen: Denken Sie daran, dass sich der Ausdruck "If Err.Number <> 0 Then" nur auf den zuletzt ausgelösten Fehler bezieht.

Wenn Ihr Codeblock nach "On Error Resume Next" mehrere Stellen hat, an denen Sie mit einem Fehlschlagen rechnen können, müssen Sie nach jeder dieser möglichen Fehlerzeilen "If Err.number <> 0" einfügen, um dies zu überprüfen Ausführung.

Andernfalls bedeutet "Weiter bei Fehler" genau das, was darin steht - Ihr Code kann in beliebig vielen Zeilen fehlschlagen, und die Ausführung wird fröhlich fortgesetzt. Deshalb ist es ein Schmerz im Arsch.

9
Phil Edwards

1) Fügen Sie oben auf der Seite On Error Resume Next Hinzu

2) Fügen Sie den folgenden Code am Ende der Seite hinzu

If Err.Number <> 0 Then

  Response.Write (Err.Description)   

  Response.End 

End If

On Error GoTo 0
8
user2289611

Eine gute Möglichkeit, dies für fehlende COM-Klassen zu handhaben:

Dim o:Set o = Nothing
On Error Resume Next
Set o = CreateObject("foo.bar")
On Error Goto 0
If o Is Nothing Then
  Response.Write "Oups, foo.bar isn't installed on this server!"
Else
  Response.Write "Foo bar found, yay."
End If
7
svinto

die Anweisung On Error Resume Next sollte über dem stehen, was validiert werden soll.

  On Error Resume Next
  'Your code logic is here

Dann ende mit Aussage wie:

  If Err.Number <> 0 then

  'Your error message goes here'

  End if
4
mrjurin

Für alle, die sowohl in ASP als auch in moderneren Sprachen gearbeitet haben, wird die Frage ein Kichern provozieren. Nach meiner Erfahrung ist die Verwendung einer benutzerdefinierten Fehlerbehandlungsroutine (die in IIS eingerichtet wurde, um die 500; 100 Fehler zu behandeln) die beste Option für die ASP Fehlerbehandlung. Dieser Artikel beschreibt die Vorgehensweise und gibt Ihnen sogar einige Beispiele für die Definition von Code-/Datenbanktabellen.

http://www.15seconds.com/issue/020821.htm

4

Es ist schon eine Weile her, seit ich im ASP Land war, aber es gibt ein paar Möglichkeiten:

try catch finally Kann in VBS sinnvoll simuliert werden (guter Artikel hier hier ) und es gibt ein Ereignis namens class_terminate, in dem Sie Ausnahmen global beobachten und abfangen können. Dann gibt es die Möglichkeit, Ihre Skriptsprache zu ändern ...

2
annakata

In einigen Szenarien können Entwickler die Skriptsprache nicht immer wechseln.

Ich bevorzuge definitiv JavaScript (und ich habe es in neuen Projekten verwendet). Die Pflege älterer Projekte ist jedoch weiterhin erforderlich und notwendig. Leider sind diese in VBScript geschrieben.

Obwohl diese Lösung keine echte "Try/Catch" -Funktionalität bietet, ist das Ergebnis dasselbe und das ist gut genug für mich, um die Arbeit zu erledigen.

1
Turgs