Objet ASPError  

Introduit dans la version ASP 3.0, l'objet ASPError intégré vous permet de visualiser en détail les informations sur la dernière erreur survenue dans le script d'une page ASP dans la session en cours. Cet objet, doté de neuf propriétés en lecture seule, fournit des informations plus détaillées sur le type et la source des erreurs que l'objet Err de VBScript.

Pour utiliser l'objet ASPError et les propriétés qu'il présente, vous devez appeler une nouvelle méthode de l'objet Server, GetLastError, qui renvoie un objet ASPErrorObject avec les valeurs des propriétés définies de façon à refléter les détails concernant la dernière erreur survenue dans le script.

Dim objMyASPError
Set objMyASPError = Server.GetLastError

Lorsque vous installez IIS 5.0, par défaut, toutes les erreurs de prétraitement, script et exécution dans le code ASP entraînent l'arrêt du traitement du script en cours et le renvoi de l'exécution du script vers une page d'erreur personnalisée nommée 500-100.ASP. Ce renvoi s'effectue par un appel interne à la méthode Server.Transfer qui, comme décrite au chapitre 9, déplace l'exécution, d'un script à un autre, tout en protégeant les informations d'état disponibles dans le premier script.

Le script 500-100.ASP (situé par défaut dans le répertoire C:\WINNT\Help\iisHelp\common ) contient un appel vers la méthode Server.GetLastError. Lorsque vous exécutez ce script, il met en forme et affiche les valeurs de la propriété en cours de l'objet ASPError renvoyé par cet appel vers GetLastError.

Vous pouvez utiliser la page d'erreur par défaut, 500-100.ASP, comme elle se présente ou l'adapter à l'aspect général de votre site, ou encore utiliser le snap-in Internet Services Manager pour envoyer les services IIS vers une page de votre choix (voir l'annexe D).

Les propriétés, collections, méthodes et événements de l'objet ASPError sont décrits dans le cadre suivant.

Commentaires/Dépannage  
 
 

De nombreux développeurs ASP débutants utilisent le code suivant pour activer le débogage de leurs scripts en utilisant l'objet Err dans VBScript :

On Error Resume Next

Si vous incluez cette ligne de code dans votre script, alors uniquement les erreurs de prétraitement et de script (syntaxe) forceront IIS à appeler la méthode Server.Transfer et à envoyer l'exécution du script à votre script 500-100.ASP (ou script de gestion des erreurs personnalisé). Les erreurs d'exécution ne forceront par IIS à transférer le traitement vers le script 500-100.ASP. Par exemple, si vous utilisez cette ligne de code de débogage, vous risquez de ne pas intercepter l'erreur dans le bloc de code suivant :

Dim intCounter
For intCounter = 1 to 100
     intResult = intCounter / (intCounter - 100)
Next

Dans ce fragment de code, vous devez ajouter du code avant l'instruction Next pour intercepter l'erreur de division par zéro qui survient lorsque la valeur intCounter est égale à 100. L'ajout de ces lignes pour intercepter les erreurs dans votre code est laborieux et prédisposé aux erreurs, car vous devez prévoir quelles lignes sont les plus sensibles aux erreurs éventuelles. Par conséquent, et parce que l'objet ASPError fournit plus d'informations que l'objet Err, il est déconseillé d'utiliser On Error Resume Next, si possible.

Une autre application réussie de la page d'objet ASPError, 500-100.ASP (ou similaire, scripts personnalisés pour les erreurs), consiste à gérer les erreurs qui surviennent sur un site accessible au public. Par exemple, vous pouvez personnaliser le script 500-100.ASP afin qu'il applique le modèle de couleur et l'arrière-plan de votre site, et inclure un numéro d'assistance pour les utilisateurs ayant besoin de support. De même, le service d'assistance peut résoudre l'appel plus efficacement si vous exploitez les informations complètes que l'objet ASPError est en mesure de fournir au script 500-100.ASP.

Une autre possibilité consiste à utiliser le script 500-100.ASP pour diriger une notification d'erreur vers le personnel approprié à l'arrière-plan, ainsi que pour masquer les détails de l'erreur aux utilisateurs. Cette version de 500-100.ASP indique simplement qu'une erreur est survenue et que l'utilisateur devra s'en charger plus tard, tout en envoyant, à l'arrière-plan, un message électronique au service d'assistance. Vous trouverez, en fin de chapitre, un exemple illustrant ces fonctions.

Les exemples de code illustrant les propriétés de l'objet ASPError utilisent tous trois scripts de génération d'erreur différents. Le premier contient une erreur de syntaxe, le second contient une erreur dans une directive de prétraitement et le dernier génère une erreur d'exécution. Les exemples utilisent tous les mêmes trois pages ASP pour générer les erreurs, alors que le contenu de la page d'erreur 500-100.ASP personnalisée change pour illustrer les différentes propriétés. Les trois pages ASP générant des erreurs sont les suivantes :

**** 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
 

La propriété ASPCode contient un code numérique représentant l'erreur spécifique à ASP survenue dans le script qui a généré l'erreur. La propriété est renseignée par IIS si l'erreur survient en traitant le script ASP.

La propriété ASPCode est définie sur lecture seule.

 
Paramètres

Aucun

 
Exemple

Cet exemple suppose que le code suivant a été ajouté au script d'erreur personnalisé par défaut, 500-100.ASP, et que chacun des trois scripts affichés à la fin de la section Commentaires/Dépannage est utilisé pour déclencher une erreur l'appelant.

**** 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 ****

Lorsque vous exécutez les scripts de génération d'erreur, le script d'exemple précédent génère les trois réponses suivantes :

Script de génération d'erreur #1 :

The value of the ASPCode property is [EMPTY]

Script de génération d'erreur #2 :

The value of the ASPCode property is ASP 0128

Script de génération d'erreur #3 :

The value of the ASPCode property is [EMPTY]
 
Remarques

Comme indiqué précédemment, la propriété ASPCode n'est pas renseignée, sauf si l'erreur est survenue lors de l'interprétation du script ASP lui-même. La présentation des directives de prétraitement est terminée.

 
ASPDescription  
objASPError.ASPDescription
 

La propriété ASPDescription est une valeur de chaîne renseignée par IIS à la détection d'une erreur ASP. Elle fournit des données plus descriptives sur le type de l'erreur ASP survenue que la propriété ASPCode. Comme avec la propriété ASPCode, la propriété ASPDescription n'est renseignée que si l'erreur qui survient fait partie de l'interprétation d'un script ASP, plutôt que s'il s'agit d'une erreur d'exécution.

 
Paramètres

Aucun

 
Exemple

Cet exemple reprend les scripts de génération d'erreur apparaissant à la fin de la section Commentaires/Dépannage. Il suppose que vous avez ajouté le code suivant au script d'erreur personnalisé par défaut, 500-100.ASP :

**** 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 ****

Lorsque vous exécutez les scripts de génération d'erreur, le script ASPDescription précédent génère les trois réponses suivantes :

Script de génération d'erreur #1 :

The value of the ASPDescription property is [EMPTY]

Script de génération d'erreur #2 :

The value of the ASPDescription property is The Include file name must be 
specified using either the File or Virtual attribute.

Script de génération d'erreur #3 :

The value of the ASPDescription property is [EMPTY]
 
Remarques

Comme ASPCode, la propriété ASPDescription n'est utile que pour les erreurs d'interprétation spécifique à ASP. La propriété Description de l'objet ASPError fournit presque toujours les mêmes informations ou des informations plus complètes sur l'erreur la plus récente.

 
Category  
objASPError.Category
 

La propriété Category contient une chaîne spécifiant le type de l'erreur qui est survenue : spécifique à IIS, au langage de script ou au composant.

 
Paramètres

Aucun

 
Exemple

Cet exemple reprend les scripts de génération d'erreur apparaissant à la fin de la section Commentaires/Dépannage. Il suppose que vous avez ajouté le code d'exemple suivant au script d'erreur personnalisé par défaut, 500-100.ASP :

**** 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 ****

Lorsque vous exécutez les scripts de génération d'erreur, ce script génère les trois réponses suivantes :

Script de génération d'erreur #1 :

The value of the Category property is Microsoft VBScript compilation

Script de génération d'erreur #2 :

The value of the Category property is Active Server Pages

Script de génération d'erreur #3 :

The value of the Category property is Microsoft VBScript runtime
 
Remarques

La propriété Category vous permet d'identifier l'emplacement de l'erreur plus rapidement.

 
Column  
objASPError.Column
 

La propriété Column contient une valeur Long indiquant la colonne de caractères spécifique dans laquelle apparaît le premier caractère du code générant l'erreur.

 
Paramètres

Aucun

 
Exemple

Cet exemple reprend les scripts de génération d'erreur apparaissant à la fin de la section Commentaires/Dépannage. Il suppose que vous avez ajouté le code suivant au script d'erreur personnalisé par défaut, 500-100.ASP :

**** 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 ****

Lorsque vous exécutez les scripts de génération d'erreur, le script Column précédent génère les trois réponses suivantes :

Script de génération d'erreur #1 :

The value of the Column property is 19

Script de génération d'erreur #2 :

The value of the Column property is -1

Script de génération d'erreur #3 :

The value of the Column property is -1
 
Remarques

La propriété Column vous aide à localiser la syntaxe incorrecte dans votre code. Toutefois, si l'erreur est spécifique à ASP, ou si l'emplacement où survient l'erreur ne contient pas de code syntaxiquement incorrect, cette valeur est de -1 et, de ce fait, d'usage limité.

 
Description  
objASPError.Description
 

La propriété Description est une chaîne décrivant la dernière erreur survenue. En général, cette propriété fournit plus de détails et est plus utile que la propriété ASPDescription associée, sauf lorsqu'il s'agit d'une erreur spécifique d'interprétation ASP.

 
Paramètres

Aucun

 
Exemple

Cet exemple reprend les scripts de génération d'erreur apparaissant à la fin de la section Commentaires/Dépannage. Il suppose que vous avez ajouté le code suivant au script d'erreur personnalisé par défaut, 500-100.ASP :

**** 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 ****

Lorsque vous exécutez les scripts de génération d'erreur, le script Description précédent génère les trois réponses suivantes :

Script de génération d'erreur #1 :

The value of the Description property is Expected end of statement

Script de génération d'erreur #2 :

The value of the Description property is Missing File or Virtual attribute

Script de génération d'erreur #3 :

The value of the Description property is Division by zero
 
Remarques

La valeur de la propriété Description fournit en général plus de détails que les autres propriétés de l'objet ASPError. Toutefois, comme les autres propriétés, elle est peu utile aux utilisateurs de votre application ASP. Par conséquent, il est essentiel que les explications que vous fournissez sur la cause de l'erreur soient complètes et utiles au niveau de l'utilisateur. En fin de chapitre, vous trouverez un exemple de script 500-100.ASP personnalisé que vous pouvez utiliser pour afficher des informations anodines sur une erreur tout en fournissant des informations utiles au développeur du script.

 
File  
objASPError.File
 

La propriété File indique le chemin d'accès complet du fichier contenant le code de génération d'erreur. Le nom de fichier contient le chemin d'accès complet du fichier à partir de la racine Web.

 
Paramètres

Aucun

 
Exemple

Cet exemple reprend les scripts de génération d'erreur apparaissant à la fin de la section Commentaires/Dépannage. Il suppose que vous avez ajouté le code suivant au script d'erreur personnalisé par défaut, 500-100.ASP :

**** 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 ****

Lorsque vous exécutez les scripts de génération d'erreur, le script File précédent génère les trois réponses suivantes :

Script de génération d'erreur #1 :

The value of the File property is /errorgen1.asp

Script de génération d'erreur #2 :

The value of the File property is /errorgen2.asp

Script de génération d'erreur #3 :

The value of the File property is /errorgen3.asp
 
Remarques

Notez que le chemin d'accès du fichier est indiqué à partir du chemin d'accès racine du serveur Web, plutôt qu'à partir de la racine de l'application en cours.

 
Line  
objASPError.Line
 

La propriété Line est une valeur Long représentant le numéro de la ligne contenant le code de génération d'erreur.

 
Paramètres

Aucun

 
Exemple

Cet exemple reprend les scripts de génération d'erreur apparaissant à la fin de la section Commentaires/Dépannage. Il suppose que vous avez ajouté le code suivant au script d'erreur personnalisé par défaut, 500-100.ASP :

**** 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 ****

Lorsque vous exécutez les scripts de génération d'erreur, le script Line précédent génère les trois réponses suivantes :

Script de génération d'erreur #1 :

The value of the Line property is 11

Script de génération d'erreur #2 :

The value of the Line property is 11

Script de génération d'erreur #3 :

The value of the Line property is 14
 
Remarques

Le compte des lignes débute à la première ligne de code ASP et commence par le numéro 1.

 
Number  
objASPError.Number
 

La propriété Number contient une valeur Long représentant un code d'erreur renvoyé par un composant COM. Cette valeur Long représente un code d'erreur COM standard.

 
Paramètres

Aucun

 
Exemple

Cet exemple reprend les scripts de génération d'erreur apparaissant à la fin de la section Commentaires/Dépannage. Il suppose que vous avez ajouté le code suivant au script d'erreur personnalisé par défaut, 500-100.ASP :

**** 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 ****

Lorsque vous exécutez les scripts de génération d'erreur, ce script génère les trois réponses suivantes :

Script de génération d'erreur #1 :

The value of the Number property is -2146827263

Script de génération d'erreur #2 :

The value of the Number property is -2147467259

Script de génération d'erreur #3 :

The value of the Number property is -2146828277
 
Remarques

Aucune

 
Source  
objASPError.Source
 

La propriété Source est une chaîne contenant la ligne de code qui a causé l'erreur la plus récente, si ce code était syntaxiquement incorrect.

 
Paramètres

Aucun

 
Exemple

Cet exemple reprend les scripts de génération d'erreur apparaissant à la fin de la section Commentaires/Dépannage. Il suppose que vous avez ajouté le code suivant au script d'erreur personnalisé par défaut, 500-100.ASP :

**** 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 ****

Lorsque vous exécutez les scripts de génération d'erreur, le script Source précédent génère les trois réponses suivantes :

Script de génération d'erreur #1 :

The value of the Source property is Fir intCounter = 1 to 100

Script de génération d'erreur #2 :

The value of the Source property is [EMPTY]

Script de génération d'erreur #3 :

The value of the Source property is [EMPTY]
 
Remarques

Comme indiqué précédemment, la propriété Source n'est utile que si l'erreur générée est une erreur de syntaxe. Dans le cas contraire, cette propriété apparaît vide.