正如我標題writen,WCF如何檢測客戶端existency
背景: 我有2個不同類型的應用程序(WPF,Silverlight的),它可以跟對方 - 醫生應用程序和患者應用程序 - 但事實並非如此意味着只有2個應用程序可以運行,例如: 我可以運行3個醫生應用程序和7個患者應用程序。 和所有這些應用程序是通過TCP連接使用wcf進行通信。 通信是實時的(如Messenger應用)
流 每次有一個應用程序在線(運行)我註冊其在WCF連接,因爲我需要讓其他應用程序知道(實時)有連接新客戶端或有新客戶斷開連接。
問題: 它的罰款,讓其他應用程序知道有入局應用程序/客戶端, 但我的問題是,如何讓其他應用程序知道這個客戶端斷開連接,
這很好,如果用戶關閉應用程序(例如,單擊關閉按鈕) - 所以在wpf中,我可以調用wcf來取消註冊連接,但是如果連接終止異常(例如,直接拔下PC的電源電纜) 有沒有什麼辦法讓我知道這個客戶端仍然連接?
我意識到這個問題,當我壓我的VS2008 f5和關閉,再次打開並關閉(重複),然後,當我調試,有很多的連接仍然存儲在那裏,但實際上客戶端已被破壞。
有人知道這個最好的解決方案嗎? 例子是非常讚賞
我的代碼片段:
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;
}
預先感謝您