WCF Canal Duplex: Vérifier si la fonction de rappel canal est toujours disponible

J'ai le problème suivant. Je suis en train d'écrire un logiciel de chat. Le client/serveur mécanisme est basé sur DualHttpBinding de la WCF. Cela signifie que si un utilisateur envoie un message à tous les clients qui sont dans la salle où le message a été envoyé, sont notifiées par le serveur.

Je veux m'assurer, que si un client de l'application se bloque (whyever), le client objet est retiré de la salle de listes.

Est-il une possibilité de vérifier le rappel du canal de l'état avant d'appeler une opération de rappel? Le problème, c'est que si je l'appelle une opération sur un client qui n'est plus connecté (à cause d'un imprévu crash), le service va s'accrocher.

 public YagzResult SendMessage(Message message)
    {
        foreach (ChatNodeAddress chatNodeAddress in message.Destination)
        {
            ChatNode chatNode = chatProvider.FindChatNode(chatNodeAddress);
            if (chatNode != null)
            {
                User currentUser = CurrentUser;
                foreach (User user in chatNode)
                {
                    //Don't notify the current client. Deadlock!
                    if (!user.Equals(currentUser))
                    {
                        //Get the callback channel here
                        IYagzClient client = GetClientByUser(user);

                        if (client != null)
                        {
                            //--> If the client here called is not any more available,
                            //the service will hang <---
                            client.OnChatMessageReceived(message);
                        }
                    }
                }
            }
            else
            {
                return YagzResult.ChatNodeNotFound;
            }
        }
        return YagzResult.Ok;
    }

Comment puis-je vérifier si un client est toujours à l'écoute? BTW, les opérations dites sur le client sont tous déclarés OneWay et la ConcurrencyMode est réglé à "Plusieurs".

Merci à vous tous!

Accueille,

Simon

OriginalL'auteur Simon | 2009-12-30