2009-08-05 8 views
11

Tengo un sistema cliente-servidor, ambas partes escritas por mí, y me gustaría poner a los clientes en un estado 'desconectado' cuando se desconecta el servidor/muere, para luego llevar volver a estar "en línea" cuando el servidor esté disponible nuevamente.WCF - tener cheque cliente para la disponibilidad del servicio

Para la primera parte, que escuchar los eventos de fallo de canal y el mango que al establecer que el cliente fuera de línea. Luego empiezo a llamar un servicio 'ping' en el servidor (cada 30 segundos) que simplemente devuelve un bool si está activo. Una vez que está vivo, el cliente obtiene el bool y vuelve a conectarse en línea.

Todo esto funciona, el problema que tengo es que cuando el cliente llama al servicio de ping y el servidor está inactivo, no se envía ninguna respuesta (obviamente) y finalmente, después de aproximadamente 2 minutos obtengo una excepción de punto final no encontrada. En este momento ya he probado 3-4 pings más y, por lo tanto, tengo 3-4 excepciones en preparación.

Mi pregunta es, ¿cómo puedo tratar con el servicio de ping con más gracia? Idealmente, me gustaría llamar periódicamente a un servicio que me permite saber si está en línea, y al instante me permite saber si no lo está.

Gracias, Will

Respuesta

12

Qué tal esto:

  • si detecta una desconexión del servidor, introduzca un modo de "ping"
  • en el "modo de ping", que establecen el cliente de " sendTimeout "a algo muy corto, por ejemplo algo así como 2 segundos o menos, ya que su llamada al método de ping del servicio debe ser respondida casi inmediatamente
  • una vez que su "ping" trabajado con éxito, de nuevo volver a crear el proxy de cliente y ajuste "SendTimeout" del cliente nuevo a la original valor (predeterminado es 1 minuto - depende de lo que tenga sentido para usted, 15 segundos, 30 segundos - lo que sea)

De esta manera, si está en "modo Ping", obtiene sus respuestas (o tiempos de espera) rápidamente y puede detectar la disponibilidad del servicio rápidamente.

Marc

+0

Gracias Marc, gran idea esto es lo que he hecho. Había olvidado por completo que uno puede editar los tiempos de espera de enlace sobre la marcha de esta manera. – WillH

+0

¿Cómo detectar el servidor está desconectado? –

+0

@Ashutosh: si el servidor está desconectado, su llamada fallará con uno de varios posibles errores ("no encontrado" o "tiempo de espera" u otros) –

Cuestiones relacionadas