web-dev-qa-db-fra.com

La gestion des erreurs de type try-catch est-elle possible dans ASP Classic?

Quelles sont les options disponibles dans ASP Classic pour la gestion des erreurs?

Par exemple:

J'utilise le Mail.SendMail fonctionne mais lors de la mise sous tension du serveur de test, cela ne fonctionne pas, ce qui est normal. Je veux tester si le mailing est possible, sinon continuer et/ou afficher un message.

Des idées?

37
Sander Versluys

Il existe deux approches, vous pouvez coder en JScript ou VBScript qui ont la construction ou vous pouvez le truquer dans votre code.

En utilisant JScript, vous utiliseriez le type de construction suivant:

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

Dans votre code ASP vous le fudez en utilisant sur error resume next au moment où vous auriez un essai et en vérifiant err.Number au point d'une capture comme:

<%
' 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

Concernant la réponse de Wolfwyrd: "On Error Resume Next" désactive en fait la gestion des erreurs! Pas sur. On Error Goto 0 remet la gestion des erreurs en marche car au moins, nous voulons que la machine la rattrape si nous ne l'avons pas écrite en nous-mêmes. Off = vous laisse le soin de le gérer.

Si vous utilisez On Error Resume Next, vous devez faire attention à la quantité de code que vous incluez après: rappelez-vous, l'expression "If Err.Number <> 0 Then" fait uniquement référence à l'erreur déclenchée la plus précédente.

Si votre bloc de code après "On Error Resume Next" a plusieurs endroits où vous pouvez raisonnablement vous attendre à ce qu'il échoue, vous devez placer "If Err.number <> 0" après chacune de ces lignes d'échec possibles, pour vérifier exécution.

Sinon, après "en cas d'erreur reprendre ensuite" signifie exactement ce qu'il dit - votre code peut échouer sur autant de lignes qu'il le souhaite et l'exécution se poursuivra gaiement. Voilà pourquoi c'est une douleur dans le cul.

9
Phil Edwards

1) Ajoutez On Error Resume Next en haut de la page

2) Ajoutez le code suivant en bas de la page

If Err.Number <> 0 Then

  Response.Write (Err.Description)   

  Response.End 

End If

On Error GoTo 0
8
user2289611

Une façon plutôt agréable de gérer cela pour les classes COM manquantes:

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

l'instruction On Error Resume Next doit être placée au-dessus de ce que nous voulons valider.

  On Error Resume Next
  'Your code logic is here

Ensuite, terminez par une déclaration comme:

  If Err.Number <> 0 then

  'Your error message goes here'

  End if
4
mrjurin

Pour toute personne qui a travaillé dans ASP ainsi que dans des langues plus modernes, la question provoquera un petit rire. D'après mon expérience, l'utilisation d'un gestionnaire d'erreurs personnalisé (configuré dans IIS pour gérer les erreurs 500; 100) est la meilleure option pour la gestion des erreurs ASP. Cet article décrit l'approche et vous donne même un exemple de définition de table de code/base de données.

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

4
Josh Warner-Burke

Cela fait un moment que je n'étais pas en ASP land, mais iirc il y a deux façons:

try catch finally peut être raisonnablement simulé dans VBS (bon article ici ici ) et il y a un événement appelé class_terminate vous pouvez regarder et intercepter les exceptions dans le monde entier. Ensuite, il y a la possibilité de changer votre langage de script ...

2
annakata

Certains scénarios ne permettent pas toujours aux développeurs de changer de langage de script.

Ma préférence va définitivement au JavaScript (et je l'ai utilisé dans de nouveaux projets). Cependant, le maintien de projets plus anciens est toujours requis et nécessaire. Malheureusement, ceux-ci sont écrits en VBScript.

Donc, même si cette solution n'offre pas de véritable fonctionnalité "try/catch", le résultat est le même, et c'est assez bon pour moi de faire le travail.

1
Turgs