J'ai un scénario de publication/abonnement dans WCF en utilisant les rappels net.tcp et Duplex. J'ai un certain nombre de clients qui s'abonnent au service, et cela fonctionne très bien. Cependant, parfois un client se ferme sans se désabonner (l'ordinateur client s'endort, les plantages de l'ordinateur, la connexion réseau est interrompue, etc.), ce qui provoque une exception lors du rappel via ma liste de rappel.Comment être informé si la session WCF Duplex est prématurément fermée
Maintenant, je peux certainement attraper l'exception et supprimer le rappel offensant, mais cela me semble moins comme un scénario d'exception et plus loin dans le sens du «comportement attendu».
Y a-t-il un événement qui se déclenche à la fermeture de la connexion et qui m'informe afin que je puisse supprimer le rappel de ma liste? Considérez que c'est net.tcp et non HTTP, donc l'état de connexion devrait être connu. Il est clair que le framework sait que la connexion a été fermée et supprimée car l'exception est quelque chose du genre "tentative d'appel d'un objet disposé".
EDIT:
Je tiens à souligner que ce n'est pas une opération longue en cours d'exécution. C'est une connexion longue durée dans un scénario de publication/abonnement. Fondamentalement, le rappel est utilisé pour informer les abonnés transitoires de divers événements au fur et à mesure qu'ils se produisent. Chaque événement est isolé et ne dure pas longtemps.
Je suis curieux de ce que la durée de votre conversation WCF est s'il est possible pour vos clients des ordinateurs pour aller dormir. Je connais bien la fonction WCF, et d'après ce que je sais, les services Duplex n'étaient pas destinés à être utilisés pour des transactions persistantes de longue durée pour la raison que vous rencontrez. – jrista
Ce qui a été «conçu pour» et pour lequel il est souvent utilisé est souvent très différent. J'ai besoin d'une longue connexion, dans laquelle j'utilise un message de pulsation pour maintenir la connexion en vie. Étant donné que WCF n'offre aucune autre option pour une connexion longue durée, je dois faire avec cela ou réécrire mon application pour ne pas utiliser WCF. –