Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Datasnap Duda (https://www.clubdelphi.com/foros/showthread.php?t=93103)

usuario1000 17-05-2018 21:43:57

Datasnap Duda
 
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

Cita:

Empezado por iMia (Mensaje 526385)
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

Cita:

Empezado por usuario1000 (Mensaje 526411)
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

Cita:

Empezado por usuario1000 (Mensaje 526412)
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...


La franja horaria es GMT +2. Ahora son las 08:27:16.

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