OVH Cloud OVH Cloud

Trace dans une appllication Webform et multi-utilisateurs

3 réponses
Avatar
Christian Montpellier
Bonjour,

Dans une application ASP.NET (Webform) je r=E9alise des=20
trace dans un fichier texte :

J'initialise cela dans Application_Start de Global.asx :
Trace.Listeners.Add(new TextWriterTraceListener
(File.AppendText(filename)));

Ensuite a l'int=E9rieur de ma webform il y a des :
Trace.WriteLine("Info a tracer");

Que va-t-il se passer si plusieurs utilisateurs ex=E9cute=20
ma webform en m=EAme temps ?
N'y a t-il pas un risque de blocage ? D'exception ? de=20
plantage ? parce que plusieurs objets Webform vont=20
essayer d'=E9crire simultan=E9ment dans mon fichier de log ?
Ou bien au contraire est-ce que cela est bien g=E9r=E9=20
automatiquement ?

Par avance merci de vos r=E9ponses,

Christian

3 réponses

Avatar
Zazar
Bonjour,

Dans une application ASP.NET (Webform) je réalise des
trace dans un fichier texte :

J'initialise cela dans Application_Start de Global.asx :
Trace.Listeners.Add(new TextWriterTraceListener
(File.AppendText(filename)));

Ensuite a l'intérieur de ma webform il y a des :
Trace.WriteLine("Info a tracer");

Que va-t-il se passer si plusieurs utilisateurs exécute
ma webform en même temps ?
N'y a t-il pas un risque de blocage ? D'exception ? de
plantage ? parce que plusieurs objets Webform vont
essayer d'écrire simultanément dans mon fichier de log ?
Ou bien au contraire est-ce que cela est bien géré
automatiquement ?



Il n'y a pas de problème particulier, la synchronisation est gérée.
NB : Ca ne marche que parce que vous ne créez qu'un seul
TextWriterTraceListener pour toute l'application : si vous en crééiez un à
chaque requête vous auriez des problèmes.
NB2 : Dans le fichier, si 2 utilisateurs accédent à votre WebForm
simultanément, les traces de chacune des requêtes seront mélangées :
Par exemple, si vous avez Trace.WriteLine("Info1"); à un endroit et
Trace.WriteLine("Info2"); à un autre, le fichier peut contenir :
Info1
Info2
Info1
Info2

mais aussi
Info1
Info1
Info2
Info2

NB3 : n'oubliez pas de fermer le fichier sur application_end

--
Zazar
Avatar
Christian Montpellier
Merci Zazar pour cette réponse qui me rassure quant à la montée en charge de
mon application.
J'avais oublié la fermeture du fichier sur l'évènement Application_end, je
vais le rajouter.

"Zazar" a écrit dans le message
de news: %
Bonjour,

Dans une application ASP.NET (Webform) je réalise des
trace dans un fichier texte :

J'initialise cela dans Application_Start de Global.asx :
Trace.Listeners.Add(new TextWriterTraceListener
(File.AppendText(filename)));

Ensuite a l'intérieur de ma webform il y a des :
Trace.WriteLine("Info a tracer");

Que va-t-il se passer si plusieurs utilisateurs exécute
ma webform en même temps ?
N'y a t-il pas un risque de blocage ? D'exception ? de
plantage ? parce que plusieurs objets Webform vont
essayer d'écrire simultanément dans mon fichier de log ?
Ou bien au contraire est-ce que cela est bien géré
automatiquement ?



Il n'y a pas de problème particulier, la synchronisation est gérée.
NB : Ca ne marche que parce que vous ne créez qu'un seul
TextWriterTraceListener pour toute l'application : si vous en crééiez un à
chaque requête vous auriez des problèmes.
NB2 : Dans le fichier, si 2 utilisateurs accédent à votre WebForm
simultanément, les traces de chacune des requêtes seront mélangées :
Par exemple, si vous avez Trace.WriteLine("Info1"); à un endroit et
Trace.WriteLine("Info2"); à un autre, le fichier peut contenir :
Info1
Info2
Info1
Info2

mais aussi
Info1
Info1
Info2
Info2

NB3 : n'oubliez pas de fermer le fichier sur application_end

--
Zazar




Avatar
Christian
J'ai ajouté à mon application une classe dont le but est
de Logguer des évènements applicatifs.
Ma classe "Logs" contient une unique méthode statique :
static void EcritLogs(string mess)
{
TextWriter log;
log=new TextWriter(File.AppendText("fich.log"));
log.WriteLine(mes);
log.Flush();
log.Close();
}

Logs.EcritsLogs() est invoqué dans le codebehind de ma
WebForm.

Je me pose les mêmes questions qu'avant :
Que va-t-il se passer si plusieurs utilisateurs exécute
ma webform en même temps ?
N'y a t-il pas un risque de blocage ? D'exception ? de
plantage ? parce que plusieurs objets Webform vont
essayer d'écrire simultanément dans mon fichier de log ?
Ou bien au contraire est-ce que cela est bien géré
automatiquement ?

Merci de votre aide,

Christian

-----Message d'origine-----
Bonjour,

Dans une application ASP.NET (Webform) je réalise des
trace dans un fichier texte :

J'initialise cela dans Application_Start de




Global.asx :
Trace.Listeners.Add(new TextWriterTraceListener
(File.AppendText(filename)));

Ensuite a l'intérieur de ma webform il y a des :
Trace.WriteLine("Info a tracer");

Que va-t-il se passer si plusieurs utilisateurs exécute
ma webform en même temps ?
N'y a t-il pas un risque de blocage ? D'exception ? de
plantage ? parce que plusieurs objets Webform vont
essayer d'écrire simultanément dans mon fichier de




log ?
Ou bien au contraire est-ce que cela est bien géré
automatiquement ?



Il n'y a pas de problème particulier, la synchronisation


est gérée.
NB : Ca ne marche que parce que vous ne créez qu'un seul
TextWriterTraceListener pour toute l'application : si


vous en crééiez un à
chaque requête vous auriez des problèmes.
NB2 : Dans le fichier, si 2 utilisateurs accédent à


votre WebForm
simultanément, les traces de chacune des requêtes seront


mélangées :
Par exemple, si vous avez Trace.WriteLine("Info1"); à un


endroit et
Trace.WriteLine("Info2"); à un autre, le fichier peut


contenir :
Info1
Info2
Info1
Info2

mais aussi
Info1
Info1
Info2
Info2

NB3 : n'oubliez pas de fermer le fichier sur


application_end

--
Zazar


.