PDA

Ver la Versión Completa : Datasnap Duda


usuario1000
17-05-2018, 21:43:57
Hola a todos.

TEngo una aplicación cliente-servidor (dataSnap) en delphi 10 con firebird.

Y se me ha ocurrido la maravillosa idea de que el servidor cada cierto tiempo envíe unos emails automáticamente según un filtro que debo hacer de unos registros de la base de datos.
Tengo lo siguiente en el servidor:
- ServerMethodsUnit1. (donde van todas las funciones que llamo desde el cliente).
- UPrincipal. Es la unidad donde está el formulario principal del servidor, es decir, la pantalla que se muestra cuando se ejecuta el servidor.
- ServerContainerUnit1.

Cuando desde la aplicación cliente llamo a una función del servidor no me da ningun problema.

Pero, ahora bien, he colocado un timer1 en el formulario principal del servidor(UPrincipal) y quiero llamar cada cierto tiempo a una funcion que está en ServerMethosUnit1 y no puedo me da error. ¿ cómo lo puedo hacer?.

Espero haberme explicado. GRacias.

orodriguezca
17-05-2018, 23:19:42
Dificil saber que puedes hacer sin que sepamos cual es el mensaje de error ;). De todas formas voy a suponer que es un problema de "visibilidad" debido a que la función a la que quieres llamar está definida en alguna sección private de alguna clase de la unidad ServerMethosUnit1 y no en la sección public de dicha clase. Siguiendo con la suposición, y considerando que la función a la quieres llamar es una función global (no una función definida en la clase), dicha función seguramente está definida en la implementación (invisible para cualquier otra unidad) y no en la interface de la unidad ServerMethosUnit1 (donde si puede ser accedida por otras unidades del proyecto).

iMia
18-05-2018, 15:15:57
La instancia del DSServer, se crea al conectarse un cliente. Si la ejecutas desde el propio servidor, no existe esa instancia... por lo que da error...
Por definicion, el servidor da un servicio a las apps clientes, crea una instancia y procesa sus llamadas... por si solo no debe hacer nada...

Debes crear una app cliente, que llame al servidor cada X tiempo (TTimer) para llamar a la función que envie lo mails...

Casimiro Notevi
18-05-2018, 15:36:37
La instancia del DSServer, se crea al conectarse un cliente. Si la ejecutas desde el propio servidor, no existe esa instancia... por lo que da error...
Por definicion, el servidor da un servicio a las apps clientes, crea una instancia y procesa sus llamadas... por si solo no debe hacer nada...
Debes crear una app cliente, que llame al servidor cada X tiempo (TTimer) para llamar a la función que envie lo mails...


Por norma debería ser así, un servidor es un servidor... y un cliente es un cliente.
El camarero (servidor) no debería enviar emails a cada rato :)

usuario1000
19-05-2018, 16:37:52
Gracias a todos por contestar.

Lo he solucionado sacando la definición de la función fuera de implementation y definiéndola en la interface.

Ahora, me he quedado pillado con lo que ha dicho Casimiro. Si resulta que el usuario tarda en conectarse varios días. Cómo le hago llegar los emails, si no es a través del servidor??, ya que el cliente no se conecta. Y esos email tienen que llegar aunque no esté conectado.

Saludos y gracias.

usuario1000
19-05-2018, 17:42:55
Gracias a todos por contestar.

Lo he solucionado sacando la definición de la función fuera de implementation y definiéndola en la interface.

Ahora, me he quedado pillado con lo que ha dicho Casimiro. Si resulta que el usuario tarda en conectarse varios días. Cómo le hago llegar los emails, si no es a través del servidor??, ya que el cliente no se conecta. Y esos email tienen que llegar aunque no esté conectado.

Saludos y gracias.




Me contesto a mí mismo, porque me he dado cuenta, porque lo que debo hacer es un nuevo proyecto enlazando al servidor para solicitar los datos y a partir de ahí generar emails.


Gracias por vuestros aporte, porque me han dado el camino a seguir.


Saludos.

Casimiro Notevi
19-05-2018, 18:04:20
^\||/^\||/^\||/

iMia
21-05-2018, 08:37:34
Me contesto a mí mismo, porque me he dado cuenta, porque lo que debo hacer es un nuevo proyecto enlazando al servidor para solicitar los datos y a partir de ahí generar emails.


Gracias por vuestros aporte, porque me han dado el camino a seguir.


Saludos.

Es lo que decía más arriba... crear una app cliente, o bien un servicio, donde puedas configurar el tiempo de llamada, y varias cosas que tu quieras parametrizar (Datos del servidor, cuenta de correo a utilizar, log, aviso de tarea realizado o fallada, etc, etc...) , y que sea esa app o servicio la que llame al sevidor para hacer que haga el trabajo... este puede estar instalado en el mismo equipo del servidor, no hace falta que sea remoto, así no te lo pararán ni nada...