¿Cómo puedo enviar un mensaje de notificación del servidor a todos los clientes en WCF?
-
06-07-2019 - |
Pregunta
Quiero enviar un mensaje de notificación cada segundo desde el servicio net tcp WCF a todos los clientes, ¿Transmisión que puedes decir?
Después de las respuestas útiles
Escribí el siguiente método que enviará notificaciones (latidos) a todos los usuarios conectados
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);
}
}
);
}
Me preocupa que se llame al método de devolución de llamada ya que el cliente puede cerrar su aplicación, pero lo manejé usando el catch catch, disminuí el tiempo de espera y envié la transmisión en paralelo, ¿es eso suficiente?
Solución
Tendrá que configurar un servicio de devolución de llamada; Escribí una guía simple para principiantes a Hace tiempo
Otros consejos
Para hacer eso, necesita crear y mantener una lista de todos los clientes conectados (la práctica general para esto es crear los métodos LogIn y LogOut para crear y administrar una lista de objetos que representan a sus clientes incluyendo su CallbackContext). Luego, con un System.Time.Timers, puede recorrer la lista de clientes conectados y enviar la notificación.
Sugerencia. este método también podría actuar como método Keep-Alive o Hear-Beat (si no es su propósito por diseño) agregando la posibilidad de eliminar clientes de su lista si el servicio no puede enviarles la devolución de llamada.