我想每秒從網絡tcp WCF服務向所有客戶端發送通知消息, 您可以說廣播嗎?如何從服務器向WCF中的所有客戶端發送通知消息(您可以說廣播)?
的有用的答案後
我寫了下面的方法將發送通知(心跳)給所有連接的用戶
foreach (IHeartBeatCallback callback in subscribers)
{
ThreadPool.QueueUserWorkItem(delegate(object state)
{
ICommunicationObject communicationCallback = (ICommunicationObject)callback;
if (communicationCallback.State == CommunicationState.Opened)
{
try
{
callback.OnSendHeartBeat(_heartbeatInfo.message, _heartbeatInfo.marketstart,_heartbeatInfo.marketend, _heartbeatInfo.isrunning, DateTime.Now);
}
catch (CommunicationObjectAbortedException)
{
Logger.Log(LogType.Info, "BroadCast", "User aborted");
communicationCallback.Abort();
}
catch (TimeoutException)
{
Logger.Log(LogType.Info, "BroadCast", "User timeout");
communicationCallback.Abort();
}
catch (Exception ex)
{
Logger.Log(LogType.Error, "BroadCast", "Exception " + ex.Message + "\n" + ex.StackTrace);
communicationCallback.Abort();
}
}
else
{
DeletionList.Add(callback);
}
}
);
}
我擔心調用回調方法,客戶端可能會關閉他的申請,但我使用try catch來處理它,減少超時並且並行地發送廣播,那麼足夠了嗎?
這篇文章很不錯,但是我發現它發送的數據是連接到客戶端的,這意味着如果一個客戶端在發送系統的時候關閉了他的應用程序就會等到超時發生,這發生在我身上時,我應用了相同的代碼,我該如何解決這個問題(使超時很小?) – 2009-06-17 14:16:52