FAQ ASP.NET/VB.NET
FAQ ASP.NET/VB.NETConsultez toutes les FAQ
Nombre d'auteurs : 38, nombre de questions : 369, dernière mise à jour : 16 juin 2021
- Qu'est ce que le Global.asax ?
- Où doit se trouver le Global.asax ?
- Comment compter le nombre de hits?
- Comment compter le nombre de visites simultanées?
- Comment savoir le temps nécessaire à l'exécution d'une requête?
- Comment envoyer un mail décrivant l'érreur quand mon application lève une exception ?
- ASP.NET repasse plusieurs fois dans le Session_Start de mon application alors que je ne change pas de Session, est-ce normal?
La classe Global est la classe capable de gérer des évènements du niveau application. Elle se trouve dans un fichier appellé Global.asax (plus précisément Global.asax.cs ou Global.asax.vb suivant le langage de développement). Le Global.asax est optionnel mais il peut faciliter le développement ainsi que la maintenance d'applications. On l'utilisera, par exemple , pour écrire une entrée dans un fichier de logs lorsqu'une exception est lancée et n'est pas gérée. Il existe également d'autres utilisations possibles comme le calcul du temps nécessaire à une requête, un compteur de hits, ... Concrètement, la classe Global est une classe dont il n'existe qu'une instance (ce que l'on appelle « singleton » dans le jargon).
Lien : Utilisation du Global.asax
Ce fichier se trouve obligatoirement dans le répertoire racine de l'application ASP.NET. Il y en a un et un seul par application.
Lien : Utilisation du Global.asax
Namespace
Developpez
Public
Class
Global
Inherits
System.Web.HttpApplication
Public
Shared
nbHits As
Integer
Protected
Sub
Application_Start
(
ByVal
sender As
Object
, ByVal
e As
EventArgs)
nbHits =
0
End
Sub
Protected
Sub
Application_BeginRequest
(
ByVal
sender As
Object
, ByVal
e As
EventArgs)
System.Math.Min
(
System.Threading.Interlocked.Increment
(
nbHits), nbHits -
1
)
End
Sub
End
Class
End
Namespace
Le Global.asax nous est d'une grande utilité dans ce cas.
Namespace
Developpez
Public
Class
Global
Inherits
System.Web.HttpApplication
Public
Shared
nbUsers As
Integer
Protected
Sub
Application_Start
(
ByVal
sender As
Object
, ByVal
e As
EventArgs)
nbUsers =
0
End
Sub
Protected
Sub
Session_Start
(
ByVal
sender As
Object
, ByVal
e As
EventArgs)
System.Math.Min
(
System.Threading.Interlocked.Increment
(
nbUsers), nbUsers -
1
)
End
Sub
Protected
Sub
Session_End
(
ByVal
sender As
Object
, ByVal
e As
EventArgs)
System.Math.Max
(
System.Threading.Interlocked.Decrement
(
nbUsers), nbUsers +
1
)
End
Sub
End
Class
End
Namespace
Lien : Utilisation du Global.asax
Namespace
Developpez
Public
Class
Global
Inherits
System.Web.HttpApplication
Public
Shared
temps As
Integer
Private
debut As
DateTime
Protected
Sub
Application_BeginRequest
(
ByVal
sender As
Object
, ByVal
e As
EventArgs)
debut =
DateTime.Now
End
Sub
Protected
Sub
Application_EndRequest
(
ByVal
sender As
Object
, ByVal
e As
EventArgs)
temps =
debut -
DateTime.Now
End
Sub
End
Class
End
Namespace
Et dans la page où l'on souhaite afficher cette durée:
LaTime.Text
=
Global
.temps.ToString
Lien : Utilisation du Global.asax
Dans le Global.asax :
Imports
System.Web.Mail
Imports
System.Text
Sub
Application_Error
(
ByVal
sender As
Object
, ByVal
e As
EventArgs)
Dim
ex As
Exception =
Server
.GetLastError
(
).GetBaseException
(
)
Using
message As
New
MailMessage
(
)
message.IsBodyHtml
=
True
message.Priority
=
MailPriority.High
Dim
from
As
New
MailAddress
(
"ton_email_from@ton_domaine.com"
)
Dim
[to
] As
New
MailAddress
(
"ton_email_to@ton_domaine.com"
)
Dim
BoiteBug As
New
MailAddress
(
"boite_bug@ton_domaine.com"
)
message.Sender
=
from
message.
[To
].Add
(
[to
])
message.
[To
].Add
(
BoiteBug)
message.Subject
=
ex.Message
Dim
chaine As
New
StringBuilder
(
)
chaine.Append
(
"<b>Erreur sur le site</b><br><br>"
)
chaine.Append
(
"Détails : <br><br>"
)
chaine.Append
(
String
.Format
(
"Date : {0}<br><br>"
, DateTime.Now
))
chaine.Append
(
String
.Format
(
"Pile : {0}<br><br>"
, ex.StackTrace
))
chaine.Append
(
String
.Format
(
"Source : {0}<br><br>"
, ex.Source
))
chaine.Append
(
String
.Format
(
"Url :"
, Request
.Url
))
message.Body
=
Server
.HtmlEncode
(
chaine.ToString
(
))
Dim
smtp As
New
SmtpClient
(
"localhost"
)
smtp.Send
(
message)
End
Using
End
Sub
Remarque: Il se peut que le serveur SMTP refuse l'envoi de l'email dans le cas où l'on spécifie une adresse mail invalide pour la propriété From.
Bien sûr que non, ce n'est pas normal. Actuellement, je n'ai rencontré ce problème qu'avec une utilisation de ZoneAlarm sur la machine sur laquelle se trouve l'application.
Vérifiez que vous ne possédez pas ce firewall ou, en tout cas, qu'il n'est pas actif car il empêche la création d'un cookie temporaire nécessaire pour garder en mémoire le SessionID.