サーバーからWCFのすべてのクライアントに通知メッセージを送信するにはどうすればよいですか?
-
06-07-2019 - |
質問
net tcp 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を使用して処理し、タイムアウトを減らして、ブロードキャストを並行して送信します。それで十分ですか?
解決
コールバックサービスをセットアップする必要があります。 簡単な初心者ガイドを作成しました戻る間
他のヒント
それを行うには、接続されているすべてのクライアントのリストを作成して保持する必要があります(これを行う一般的な方法は、LogInメソッドとLogOutメソッドを作成して、CallbackContextを含むクライアントを表すオブジェクトのリストを作成および管理することです)。 次に、System.Time.Timersを使用して、接続されたクライアントリストをループし、通知を送信できます。
ヒント。このメソッドは、サービスがコールバックを送信できない場合にリストからクライアントを削除する可能性を追加することにより、Keep-AliveまたはHear-Beatメソッドとして機能することもできます(これが意図的な目的でない場合)。
所属していません StackOverflow