2011-09-01 13 views
5

Estoy tratando de obtener un servicio WCF para saber cuando un cliente se ha desconectado.Manejando la desconexión del cliente en el servicio dúplex WCF

Después de leer este artículo wcf notification on disconnect Logré hacer funcionar un proyecto de prueba.

El cliente y el servidor permanecen abiertos hasta que cierro el cliente, luego el evento OperationContext.Current.Channel.Closed parece activarse una vez que expira el tiempo de espera en la línea siguiente.

<reliableSession enabled="true" ordered="true" inactivityTimeout="00:01:00" /> 

Después de probar esto funcionó como quería Luego trató de integrarlo en un proyecto más grande que tengo.

Esto parece comportarse de manera diferente, ya que el OperationContext.Current.Channel.Closed incluso se dispara después del tiempo especificado en la configuración <reliableSession ordered="true" inactivityTimeout="00:01:00" />, incluso cuando el cliente aún está abierto.

Las cosas que he notado que son diferentes es el hecho de que no puedo especificar una propiedad enabled = "true" en la configuración. Además, el segundo proyecto usa WSDualHTTPBinding mientras que el primero usa WSHTTPBinding.

Mi pregunta es por qué el segundo proyecto se está comportando de esta manera y cómo puedo lograr que se comporte como el primero?

Si necesita algún archivo de código o configuración, por favor hágamelo saber y lo haré directamente.

Saludos cordiales

Ash Protocolo

+0

¿En qué plataformas se está ejecutando el cliente? –

Respuesta

2

El HTTP es inherentemente sin estado y puramente petición/respuesta. Cómo funciona WSDualHTTPBinding es que abre canales tanto en el servidor como en el cliente, cuando el servidor está listo para enviar un mensaje, usará el canal alojado por el cliente para enviar el mensaje. Entonces, lo que podría estar sucediendo es que la conexión en el cliente está abierta, no se escucha nada por un minuto, esto se detecta como "inactivo" y luego el cliente cierra la conexión. No estoy seguro de cuáles son sus requisitos, pero es posible que desee considerar cambiar a TCPBinding ya que es una conexión con estado.

¿El cliente puede recibir mensajes del servidor? ¿Los mensajes se envían regularmente? ¿Estás seguro de que el cliente realmente mantiene la conexión abierta?

+0

Hola Jason gracias por la respuesta. Recibiré respuestas a sus preguntas y las publicaré aquí en breve. – user589195

Cuestiones relacionadas