Comme writen dans mon titre,WCF comment détecter client existency
fond: J'ai deux différents types d'applications (WPF-silverlight) qui peuvent parler entre eux - l'application médecin et demande du patient - mais il n'a pas signifie que seulement 2 applications seront exécutées, par exemple: Je peux exécuter 3 application médecin et 7 application patient. et toutes ces applications communiquent en utilisant wcf via une connexion tcp. la communication est en temps réel (comme application de messagerie)
flux chaque fois qu'il ya un i enregistrer sa connexion application en ligne (run) à WCF, parce que je dois laisser les autres applications savent (temps réel) il y a nouveau client connecté ou il y a un nouveau client déconnecté.
problème: il est bien de laisser l'autre application savoir qu'il ya, de l'application/client entrant, mais mon problème est, comment laisser l'autre application savoir si ce client a été déconnecté,
il est très bien si l'utilisateur ferme l'application correctement (par exemple cliquez sur le bouton de fermeture) - donc dans wpf, je peux appeler le wcf pour annuler l'inscription,
mais comment si la connexion était terminée anormale (par exemple, débranchez directement le câble d'alimentation de votre PC) Y at-il un moyen pour moi de connaître ce client encore connecté ou non?
je réalise ce problème quand je pres f5 dans mon VS2008 et fermez, et ouvrez à nouveau et fermez (répété) et puis, quand je débogue, il y a beaucoup de connexion est encore stockée là mais le client est déjà détruit.
alors quelqu'un a-t-il connu cette meilleure solution? exemple est très apprécié
mon extrait de code:
Dictionary<Guid, Client> Connections = new Dictionary<Guid, Client>();
// above is the variable where i put the connections
object syncObj = new object();
public ITcpServiceCallback CurrentCallback { get { return OperationContext.Current.GetCallbackChannel<ITcpServiceCallback>(); } }
// this function is called when the program started
public List<Client> ShakeHand(Client client, RoleType appType) {
if(GetClientsByCallback(CurrentCallback).Count < 1 && GetClientsByID(client.ID).Count < 1) {
List<Client> retVal = new List<Client>();
lock(syncObj) {
if(appType == RoleType.Doctor) {
List<Client> doctors = Helpers.GetDoctor(AppDomain.CurrentDomain.BaseDirectory + "App_Data/doctor.xml");
foreach(Client doctor in doctors) {
doctor.Status = ConnectionStatus.Offline;
foreach(Client con in Connections.Values) {
if(con.Role == RoleType.Doctor && con.ID == doctor.ID) {
doctor.Status = ConnectionStatus.Online;
break;
}
}
retVal.Add(doctor);
}
} else { //b la.. bla similiar like if above
}
client.Callback = CurrentCallback;
client.Status = ConnectionStatus.Online;
// this is the code where i add the connection
Connections.Add(Guid.NewGuid(), client);
}
return retVal;
}
return null;
}
Merci à l'avance