2010-05-26 44 views
29

La documentación sobre este tema es deficiente. Uso servicios WCF con NetTcpBinding alojado en el servicio de Windows. El problema es que una sesión se corta cuando está inactiva por algún tiempo. Lo que necesito es la sesión que siempre está viva. ¿Es la sesión confiable de WCF algo que puede ayudar? ¿O puedo jugar con la configuración de tiempo de espera?¿Cuál es el propósito de la sesión confiable de WCF?

Respuesta

39

No, una sesión confiable finalizará como cualquier otra sesión. La pregunta principal realmente es: ¿por qué quieres que tus sesiones sean "interminables"? Si realmente necesita esto, necesita aumentar los tiempos de espera en la sesión.

El punto de una sesión confiable es que la persona que llama sabrá sobre cualquier mensaje que se pierda. Contrariamente a la creencia popular, la sesión confiable no puede garantizar la entrega de un mensaje, pero si no se puede entregar un mensaje, al menos la persona que llama lo sabrá.

retirar algunos de estos recursos para obtener más información de fondo:

+0

Gracias por aclarar lo que es fiable para la sesión. En cuanto a la sesión "sin fin": tengo un sistema basado en eventos. Cuando llega un mensaje, el cliente debe llamar a algún servicio WCF. Los mensajes pueden aparecer cada segundo y es importante mantenerse al tanto de cada uno. A veces, el intervalo entre la recepción de un mensaje puede ser mucho mayor que un segundo, digamos uno o dos días. Entonces necesito un mecanismo para mantenerme vivo. –

+1

@bsnote: ¿por qué? Si el intervalo entre dos mensajes es de dos días, realmente no tiene sentido tener esa sesión activa todo el tiempo, en mi opinión ... –

+0

Es demasiado caro crear un canal cada vez que se recibe un mensaje en caso de que los mensajes se reciben cada segundo. Aunque estoy de acuerdo en que no tiene sentido tener sesiones cuando el intervalo es de un día. –

6

si usted no utiliza el canal, se cerrará él mismo después de un tiempo. puede cambiar el tiempo de espera predeterminado (que es de 10 minutos) desde el enlace.

NetTcpBinding binding = new NetTcpBinding(); 
binding.ReceiveTimeout = TimeSpan.MaxValue; 
binding.ReliableSession.InactivityTimeout = TimeSpan.MaxValue; 

Ver más en MSDN

Cuestiones relacionadas