Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-09-2014
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Servidor y cliente DataSnap

Hola a todos, tengo un servidor DataSnap con una conexión a una Base de Datos de SQL Server, en él un par de métodos de consultas a tablas de la BD para obtener el saldo de un cliente determinado.

En la aplicación cliente tengo un TTimer que cada 3 segundos ocupa usar esas consultas para mostrar el saldo actualizado del cliente. lo que me está sucediendo es que a al final de todos los días después de unas horas de que el cliente tenga la aplicación abierta y esté el Timer activado para refrescar el saldo, aparece el error siguiente:

Connection Closed Gracefully

Cuando reviso el Server tengo que matar el proceso porque no responde y reiniciarlo de nuevo, entonces es que el cliente puede recomenzar el trabajo. alguna sugerencia de porqué puede estar pasando esto ?

Gracias por sus atenciones
Responder Con Cita
  #2  
Antiguo 10-09-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Por lo que comentas, el error está en la parte Servidor.
Supongo que cada vez que se le solicita la información hace algo con las consultas que va cargando el servidor.

Puede ser que tenga que ver con transacciones que se van acumulando y nunca hacen commit.
Esto no se como mirarlo en SQLServer, pero seguramente habrá algún contador de transacciones. Trata siempre de utilizar transacciones en modo ReadOnly, siempre que puedas

Puede ser que no liberes algún componente que creas dinámicamente y cargues la memoria hasta su límite.
Verifica como va creciendo el consumo de memoria en el servidor.
Para agilizar esto puedes hacer que la aplicación cliente pida la información cada medio segundo o menos.

Puede ser que el calculo que hace genere una excepción en "ciertas condiciones raras" y que no se trate y por lo tanto cierre el programa.
Quizás haya algún caso en el que divida por 0, por ejemplo, en algún momento del día en el que el cliente tiene saldo 0.
Responder Con Cita
  #3  
Antiguo 10-09-2014
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Gracias por responder, pero es que no uso commit porque lo que tengo son dos consultas de selección, una consulta suma todos los depósitos del cliente y la otra todas las ventas ya la diferencia me arroja el saldo, son los métodos que mas se usan cada 3 segundo, el tercer método que uso en el server es una consulta también de selección para mostrar las ventas en la aplicación cliente en un rango de fecha determinado, osea que son cosas bien básicas
Responder Con Cita
  #4  
Antiguo 10-09-2014
jgutti jgutti is offline
Miembro
 
Registrado: may 2003
Posts: 189
Poder: 21
jgutti Va por buen camino
hola, yo trabajo con datasnap y el mensaje que publicas se produce al perder la conexión del cliente con el servidor, esto sucede si en la red se produce variaciones o perdidas de la señal entre un punto y otro
- Prueba desconectando el cable de red en uno de los computadores (servidor o cliente) , esto replica el mensaje
- Si el problemas corresponde al punto anterior, solo deberias reiniciar el cliente

- saludos
jgs
Responder Con Cita
  #5  
Antiguo 10-09-2014
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Gracias, es muy buena idea esa prueba que comentas, pero el tema no es ese, el tema es que el server se queda pegado, ahí está el principal problema, porque el cliente puede en cualquier momento cerrar la aplicación y volverla a abrir, pero es inconveniente que esto se haga en el servidor a cada momento.
Responder Con Cita
  #6  
Antiguo 10-09-2014
jgutti jgutti is offline
Miembro
 
Registrado: may 2003
Posts: 189
Poder: 21
jgutti Va por buen camino
y en reemplazo de un timer , utilizar un boton refresh activado por el usuario
- Por lo que entiendo realiza una consulta por cliente, si es correcto solo realizar una consulta con parametros que muestre Saldo del cliente solicitado
Responder Con Cita
  #7  
Antiguo 10-09-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Cita:
no uso commit porque lo que tengo son dos consultas de selección
Según tengo entendido, toda sentencia SQL se ejecuta en una transacción. La transacción puede ser de "solo lectura" o "lectura/escritura" (y alguna otra variante que no viene al caso).
Asegúrate de que la transacción sea de "solo lectura". Esto no se como se hace en SQL Server. Suele ser un parámetro que utilizas en la conexión, si no utilizas transacciones explícitamente.
También puedes abrir y cerrar la conexión cada vez que haces la consulta. Esto suele hacer las cosas un poco más lentas y un poco mas pesadas en el servidor de base de datos. Si no influye demasiado esta sería una buena solución.

De todos modos:
¿Has verificado si luego de muchas llamadas el consumo de memoria en el servidor que contiene el servidor DataSnap se desborda?
¿Has verificado si luego de muchas llamadas el consumo de memoria en el servidor que contiene el servidor de base de datos se desborda?
¿Has verificado el contador de transacciones del servidor de base de datos?
¿Estás seguro de que el servidor no generó ninguna excepción que lo deje pegado?

También se me ocurre que el servidor DataSnap puede estar esperando una respuesta del servidor de base de datos y hasta que no obtenga su respuesta se queda pegado. Esto puede deberse a algún bloqueo de tablas, pero sería raro.
Responder Con Cita
  #8  
Antiguo 10-09-2014
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Gracias jgutti y duilioisola por sus respuestas he decidí probar quitando el timer, desde hace unas horas todo ha ido bien, espero que así siga, ahora en cuanto a las preguntas que me haces duilioisola, la verdad que no tengo mucha idea de como verificar esos parámetros, algún lugar donde leer como hacerlo ?
Responder Con Cita
  #9  
Antiguo 11-09-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Para verificar el estado de la memoria, bastaría con abrir el TaskManager (Administrador de Tareas) en el ordenador que tiene el servidor DataSnap y ver la gráfica de la memoria.
Puedes hacer que el refresco sea lento, si vas a esperar mucho (Velocidad de actualizacion --> Baja).

Si sube y nunca baja, quiere decir que se está perdiendo por algún sitio...
Responder Con Cita
  #10  
Antiguo 11-09-2014
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Gracias por todo, bueno os comento que desde ayer todo anda bien, así que pienso que el timer de 3 segundos aunque no lo parezca estaba influyendo en la carga del servidor, de igual forma voy a revisar la posible saturación de la memoria como me indicas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ejemplo de un Cliente/Servidor Datasnap? kaiserilich Conexión con bases de datos 2 30-06-2014 16:21:49
Datasnap en el cliente da error tulio Desarrollo en Delphi para Android 12 10-06-2014 16:28:00
Datasnap y cliente android - Problema al conectar vicens22 Desarrollo en Delphi para Android 8 04-12-2013 10:13:28
Cliente de Datasnap en WinXP sin ser administrador no funciona? lsg Varios 8 21-06-2011 19:47:00
Cliente/servidor o Datasnap u otros jgutti Varios 2 23-12-2010 17:54:21


La franja horaria es GMT +2. Ahora son las 01:33:59.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi