(je travaille sous VS2005 en C#)
Pour activer le traçage réseau, afin de "pister" les échanges entre un serveur et un client vous devez :
1° activer dans le menu "Générer" de la page "propriétés" de votre application les constantes DEBUG & TRACE
2° Ajouter le code suivant dans votre fichier app.config
<
configuration >
.....
.....
....
< system.diagnostics >
< sources >
< source name = " System.Net " >
< listeners >
< add name = " System.Net " />
FONT color=#800000 size=2>listeners >
FONT color=#800000 size=2>source >
< source name = " System.Net.Sockets " >
< listeners >
< add name = " System.Net " />
listeners>
FONT color=#800000 size=2>source>
<sourcename="System.Net.Cache">
<listeners>
<addname="System.Net"/>
FONT color=#800000 size=2>listeners>
FONT color=#800000 size=2>source>
FONT color=#800000 size=2>sources>
<switches>
<addname="System.Net"value="Verbose"/>
<addname="System.Net.Sockets"value="Verbose"/
<addname="System.Net.Cache"value="Verbose"/>
FONT color=#800000 size=2>switches>
<sharedListeners>
<addname="System.Net" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\my.log"/>
FONT color=#800000 size=2>sharedListeners>
<traceautoflush="true"/>
system.diagnostics>
FONT color=#800000 size=2>configuration>Quelques remarques :
- Vous pouvez/devez laisser les balises existantes contenues dans
- Les lignes dans la balise indique les méthodes à tracer (ex : System.Net.Sockets pour les méthodes socket, TcpListner, TcpClient...)
- les param value de la balise indique le type de trace à lister (Verbose : très explicite)
Voici un exemple de log générée (on y voit clairement le contenu du message échangé ($$$DEB$$$...) :
(Copier/coller les logs dans un fichier texte pour meiux voir son contenu).[0460] Socket#39086322::Send()
[0460] Data from Socket#39086322::Send
24 30 30 30 38 341 43 : $$$DEB$$$00088DC
52 56 5F 48 49 43 20 : QDSRV SRVSISC
-43 20 20 20 37 2F 31 : VSESISC 27/1
36 3A 30 38 38 3 8 30 : 2/2006 16:08:380
30 30 30 30 30 31 24 : 000304400000001$
E 24 24 24- : $$FIN$$$
[0460] Exiting Socket#39086322::Send() -> 88#88
[2784] Socket#39086322::Receive()
[2784] Exception in the Socket#39086322::Receive - Une opération non bloquante sur un socket n'a pas pu être achevée immédiatement
2784] Exiting Socket#39086322::Receive() -> 0#0
[1200] DNS::Resolve(localhost)
Attention : l'erreur que vous pouvez aprerçevoir dans ces log "System.Net.Sockets Error: 0 : [2784] Exception in the " correspond à une exception levée suite à un timeout sur la lecture (paramétrage applicatif pour l'utilisation de ma socket). Ce n'est donc pas une erreur applicative ...
Vous pouvez retrouver plus de précisions à http://msdn2.microsoft.com/fr-fr/library/ty48b824(vs.80).aspx
Bon développement.
DT