2009-03-01 8 views
8

Tengo un servicio de Windows que registra las lecturas de velocidad de una pistola de radar en una base de datos. Además, hice del servicio un servidor WCF. Tengo un cliente de Forms y CF que se suscribe al servicio y se le devuelve la llamada cada vez que hay una lectura que cumple ciertos criterios.Contrato de devolución de llamada de larga duración a través del canal dúplex WCF: ¿patrones de diseño alternativos?

Esto funciona en principio, pero después de un tiempo el canal expira. Parece que hay algunos problemas fundamentales con las conexiones de larga ejecución (consulte http://blogs.msdn.com/drnick/archive/2007/11/05/custom-transport-retry-logic.aspx) y una devolución de llamada a doble cara HTTP puede no ser la solución correcta. ¿Hay alguna otra forma en que pueda realizar un patrón de publicación/suscripción con WCF?

Editar: Incluso con un tiempo de espera de 2 horas, el canal finalmente se ve comprometido. Obtengo este error:

La operación 'SignalSpeedData' no se pudo completar porque el canal de sesión agotó el tiempo de espera esperando recibir un mensaje. Para aumentar el tiempo de espera, establezca la propiedad receiveTimeout en el enlace en su archivo de configuración o establezca directamente la propiedad ReceiveTimeout en el enlace.

Esto sucedió 15 minutos después de la última llamada exitosa. Me pregunto si en lugar de mantener la sesión abierta, es posible restablecer una nueva sesión para cada llamada.

Respuesta

6

La mensajería confiable se ocupará de sus necesidades. El canal se restablece si hay un problema. WSDualHTTPBinding proporciona esto para el enlace http, y también hay un enlace tcp que permite esto. Si está en la misma computadora, el enlace de tubería con nombre lo proporcionará de manera predeterminada.

+0

Si se refiere a la sesión confiable, ya la estoy usando y configuré el tiempo de inactividad en 2 horas. – cdonner

+1

Por lo tanto, se supone que "RS" envía mensajes de infraestructura después del tiempo de inactividad. Lamentablemente, no en la última versión del marco. Si envía un mensaje de "latido del corazón" cada 20 minutos más o menos, debería solucionar el problema. También hay otro entorno que tendré que buscar mañana. – Steve

+3

Estimado Steve, cdonner, ¿Cuál fue la solución real? Los mensajes de heartbeat no se ven bien para mí y preferiría algún parámetro de configuración. –

Cuestiones relacionadas