2009-03-20 26 views
5

¿Cómo puedo manejar las desconexiones del cliente WCF?Cómo manejar la desconexión del cliente WCF

He probado CallBacks pero parece que solo funciona cuando el cliente se desconecta "claramente" con el botón "Desconectar", por ejemplo.

Deseo que se notifique a mi servidor cuando el Cliente se desconectó, incluso en desconexión manual o bloqueo del proceso del cliente.

+0

Su pregunta no es clara. ¿Estás intentando volver a conectarte en un tiempo de espera o tienes una conexión/desconexión manual? –

+0

Quiero que se notifique a mi servidor cuando el Cliente se desconectó, incluso en desconexión manual o bloqueo del proceso del cliente –

Respuesta

0

¿Por qué no tener un bucle en el que el cliente solo hace sonar el servicio cada segundo y luego realiza una devolución de llamada? cuando la devolución de llamada falla, el cliente se desconecta.

0

Una variación en el sondeo sería usar mensajes. El cliente podría publicar un mensaje "Estoy aquí" y luego eliminar el mensaje cuando se desconecte. El servidor podría monitorear la cola de desconexiones. Otra opción es usar BOSH, comunicación HTTP bidireccional. Esto es lo que usan los clientes de chat web.

7

Utilice los eventos OperationContext.Current.Channel.Faulted y OperationContext.Current.Channel.Closed.

Estos eventos se desencadenan cuando el cliente se desconecta por la razón que sea.

+0

El evento OperationContext.Current.Channel.Closed no se dispara para mí en cualquier momento ... Quiero un evento para disparar cuando salgo del cliente WinForm ... estoy usando wsDualHttpBinding en WCF. ¿Cómo se usa este evento? – Oliboy50

0

Yo diría que si el cliente se desconecta de forma anormal, no hay forma de asegurarse de que el servidor lo sepa. Es bastante parecido a HTTP. Si cerramos el navegador, digamos que con un comando forzado, el navegador no enviará nada al servidor.

Esa es una de las muchas razones por las que tenemos tiempo de espera de sesión. Para desconectar un cliente y limpiar en el servidor todo lo que se está utilizando si un cliente hace algo incorrecto (operaciones demasiado largas, por ejemplo) o se desconecta sin avisarle al servidor.

0
if (HttpContext.Current.Response.IsClientConnected == false) 
{ 
..} 

Le puede ayudar a

Cuestiones relacionadas