Как я могу отправить уведомление с сервера всем клиентам в 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, уменьшил время ожидания и отправил широкое приведение параллельно, так достаточно ли этого?
Решение
Вам необходимо настроить службу обратного вызова; Я написал простое руководство для начинающих a вернувшись
Другие советы
Чтобы сделать это, вам необходимо создать и поддерживать список всех подключенных клиентов (общей практикой для этого является создание методов входа и выхода из системы для создания списка объектов, представляющих ваших клиентов, включая их CallbackContext, и управления им).Затем с помощью таймеров System.Time.вы можете просмотреть список подключенных клиентов и отправить уведомление.
Чаевые.этот метод также может действовать как метод Keep-Alive или Hear-Beat (если это не является его целью по дизайну), добавляя возможность удаления клиентов из вашего списка, если служба не может отправить им обратный вызов.