2009-04-17 8 views
1

Je travaille sur une application Comet écrite en ASP.NET. Il existe un tableau de contextes de connexion actifs (HttpContext). Et il y a un fil qui devrait périodiquement parcourir la collection et vérifier leur état. L'architecture de l'application n'est donc pas thread-per-request.Vérifier la connexion est active dans ASP.NET

Quelle est la meilleure façon de vérifier qu'une connexion est active (non fermée par l'hôte distant)?

Je trouve ceci:

context.Response.Write(' '); 
context.Response.Flush(); 

if (!context.Response.IsClientConnected) 
{ 
    // ... 
} 

Mais ce n'est pas une bonne solution car il faut un temps de fil à traiter (flush() est l'opération de blocage). J'ai besoin d'une solution qui fonctionne très rapidement pour de nombreuses connexions simultanées et n'utilise pas d'opérations de blocage.

Peut-être existe-t-il des fonctionnalités IIS ou ASP.NET qui permettent de surveiller les connexions de cette façon?

Répondre

2

La réponse courte est ... non. La seule façon dont ASP.NET sait renvoyer false pour IsClientConnected est si l'utilisateur appelle différemment le serveur ou si Response.Close a déjà été appelé. Il est tout à fait possible pour l'utilisateur de fermer la connexion et de toujours avoir le retour IsClientConnected vrai, selon mon expérience. Pensez à la communication HTTP sous-jacente qui se passe et vous pouvez voir pourquoi.

Qu'essayez-vous d'accomplir?

+0

C'est un service de discussion avec la fin du client Flash. Et c'est le moyen de déterminer quand un client se déconnecte. – alexey

+0

Je ne vois pas pourquoi à partir de la "communication HTTP sous-jacente". HTTP est un flux généralement sur TCP. Si le client ferme la connexion, le flux TCP est rompu (et il s'agit d'un événement détectable lors d'un arrêt TCP propre, voir 'FIN', moins si quelqu'un coupe simplement les fils); alors la connexion HTTP elle-même est connue pour être fermée (car il n'y a aucune future connexion TCP qui peut se connecter à ce flux HTTP). Comet n'est pas différent car il s'agit seulement d'un flux HTTP de longue durée. – user2864740

+0

http://stackoverflow.com/questions/33449876/how-does-asp-net-httpresponse-isclientconnected-work – user2864740

Questions connexes