使用如在暗示:WCF服務器推送連接測試。中國平安()?
我實施ServerPush設置爲我的API從事件服務器(無投票)獲得實時通知。基本上,服務器有一個RegisterMe()和UnregisterMe()方法,客戶端有一個名爲Announcement(字符串消息)的回調方法,通過WCF中的CallbackContract機制,服務器可以調用。這似乎運作良好。
不幸的是,在這個設置中,如果服務器崩潰或者不可用,客戶端將不知道,因爲它只能監聽消息。線路上的沉默可能意味着沒有公告,也可能意味着服務器不可用。
因爲我的目標是減少輪詢而不是即時性,所以我不介意在服務器上添加一個無效的Ping()方法,而RegisterMe()和UnregisterMe()僅用於測試服務器的連接。我相信定期測試這種方法會確保我們仍然連接(並且因爲這是TCP,所以沒有公告已被丟棄),因爲這是TCP。)
但是Ping()方法是必需的還是這種連接性測試在默認情況下作爲WCF的一部分提供 - 例如serverProxy.IsStillConnected()或其他東西。據我瞭解,頻道的狀態只會在失敗的Ping()後返回Faulted或Closed,而不是取而代之。
2)從更廣泛的角度來看,這種回調方式是否穩固?這不適用於http或ajax - 連接的客戶端數量很少(幾十個客戶端,最多)。這種方法是否存在嚴重問題?由於這似乎是一個輕微的風險,我怎樣才能限制緩慢/惡意客戶端阻止服務器不處理它的回調隊列足夠快?是否有一種特定於回調的超時時間,可以在不影響其他操作的情況下進行設置?
謝謝!這是一個很好的答案。由於這個問題需要部分的意見,所以我想再補充一點,所以我要把它放開。但迄今爲止+1。 – 2009-11-09 17:26:23
您還可以將回調操作標記爲「單向」,而不用擔心客戶端在其回調方法中執行的操作。 – thewpfguy 2013-03-13 09:54:36