喜
也許這看起來可笑,但是這是問題,至少對我來說Wcf Duplex:檢索客戶端連接?
我寫雙工WCF服務,我的服務,我需要得到積極的客戶服務,並將其保存,並在與發生特殊事件我打電話特定的客戶端併爲其發送一些值。所以我定義字典並保存客戶端。 (用這種方法客戶端調用)
public static Dictionary<int, IServiceCallbak> ActiveClients;
public void IConnect(int SenderId)
{
if (ActiveClients == null)
ActiveClients = new Dictionary<int, IServiceCallbak>();
Client = OperationContext.Current.GetCallbackChannel<IServiceCallbak>();
if (ActiveClients.Count(ac => ac.Key == SenderId) > 0)
ActiveClients.Remove(SenderId);
ActiveClients.Add(SenderId, Client);
}
所以後來當我需要從字典中尋找客戶,並調用具體的方法:Client.DoSomthing().
此外,當客戶想要退出時,它調用IDisconnect
方法,它將從詞典中刪除客戶端。
所以我管理服務中的活動客戶端!
But there is problem in client for managing themselves
經過一段時間後,在app.config
定義的服務連接將被關閉,您應該續約,然後打開服務。
因此,在這種情況下:
1)是否有重新創建任何解決方案,並在客戶端中打開服務對象automatically
。
2),或者在服務器端,當服務需要致電客戶,從字典中查詢客戶服務對象的狀態,並重新從服務器端(Ridiculous-solution
)
連接編輯
我認爲更好的解決方案是要處理Suggestion 1
,我不知道怎麼回事!!!
因此,現在的問題是:Is way exist to do Suggestion 1 Or not?
以前我描述建議1在評論:
「並自動引用這種情況下的事件(如關閉或中止),但我沒有找到任何這樣做在Service-Client 「
關於建議'1',如果我重新創建服務對象,並調用服務,有很大的問題,服務會發現客戶端具有不同的服務回調通道。所以我的意思是,我爲服務創建了具有相同Service-Callback-Channel的相同對象。並自動引用此事件(如關閉或中止),但我在Service-Client中找不到這樣的事情,但在Service-channel'Closing'中有一個事件。那麼有什麼方法可以使用它? – Rev 2010-10-24 08:51:04