Quiero crear un ejemplo simple de cliente-servidor en WCF. Hice algunas pruebas con devoluciones de llamadas, y funciona bien hasta el momento. Jugué un poco con la siguiente interfaz:WCF - Devolución de llamada del cliente frente a sondeo para "mantener la lista de suscriptores"
[ServiceContract(SessionMode = SessionMode.Required, CallbackContract = typeof(IStringCallback))]
public interface ISubscribeableService
{
[OperationContract]
void ExecuteStringCallBack(string value);
[OperationContract]
ServerInformation Subscribe(ClientInformation c);
[OperationContract]
ServerInformation Unsubscribe(ClientInformation c);
}
Es un ejemplo simple. un poco ajustado. Puede solicitar al servidor que "ejecute una devolución de llamada por secuencias", en cuyo caso el servidor invierte la cadena y llama a todas las devoluciones de llamada de los clientes suscritas.
Ahora, aquí viene la pregunta: si quiero implementar un sistema donde todos los clientes "se registran" con el servidor, y el servidor puede "preguntar" a los clientes si todavía están vivos, ¿implementaría esto con devoluciones de llamada (así que en lugar de este "stringcallback" una especie de TellTheClientThatIAmStillHereCallback). Al verificar el estado de comunicación en la devolución de llamada también puedo "saber" si un cliente está muerto. Algo similar a esto:
Subscribers.ForEach(delegate(IStringCallback callback)
{
if (((ICommunicationObject)callback).State == CommunicationState.Opened)
{
callback.StringCallbackFunction(new string(retVal));
}
else
{
Subscribers.Remove(callback);
}
});
Mi problema, dicho de otro modo:
- el servidor puede tener 3 clientes
- Cliente A muere (me tire de la clavija de la computadora portátil)
- el servidor muere y vuelve a la línea
- Un nuevo cliente llega hasta
Entonces, básicamente, ¿usaría devoluciones de llamada para verificar el "estado de vida inmóvil" de los clientes, o usaría sondeos y realizar un seguimiento "cuánto tiempo no he oído hablar de un cliente" ...
¿Cómo se está conectando al WCF Sever? ¿Estás usando TCP? Eso cambiaría la forma de implementar un agrupamiento. –