2009-09-25 5 views
1

J'ai recherché sur le Web une solution à ma question, mais sans résultats jusqu'à présent.
J'ai fait un test avec une application Silverlight, un SocketServer et un SocketClient (avec une application Silverlight).
En mode débogage, avec les deux applications en cours d'exécution, lorsque j'ai fermé la fenêtre du navigateur, j'ai apprécié de voir qu'un événement est déclenché sur le serveur et la connexion Socket est automatiquement fermée.

Le grand mystère a commencé. Comment c'est vraiment arrivé?
Qu'en est-il de l'arrêt de l'ordinateur client en appuyant sur le bouton d'alimentation?
Mon événement sera-t-il toujours déclenché ou je me retrouverai avec un débordement de pile sur le serveur pour de nombreuses connexions Socket non fermées?Empêcher le débordement de la pile pour de nombreuses connexions Silverlight Socket non fermées

Répondre

1

Sur le serveur, vous devriez vraiment interroger vos connexions socket pour voir si elles sont encore en vie. Envoyer des messages "Are you still alive".

Habituellement, une fois qu'une connexion socket est perdue, l'envoi de données vers le bas le fera tomber avec une exception.

Malheureusement, les ordinateurs ne peuvent souvent pas détecter si une socket a perdu son lien jusqu'à ce que vous essayiez de faire quelque chose avec elle. La seule fois où il sait, c'est quand le client (ou le serveur) envoie une commande "close connection" (ce qui est souvent fait dans .NET via la méthode Socket.Close()).

Les douilles sont une douleur comme ça.

Questions connexes