Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Windows Service y Sockets (https://www.clubdelphi.com/foros/showthread.php?t=81916)

NeWsP 03-01-2013 14:01:17

Windows Service y Sockets
 
Buenos días,

Estoy haciendo un servicio de windows con sockets, pero no consigo que funcione, si hago la aplicación servidor como aplicación normal funciona bien, el problema es que al hacer el servicio ( creando aplicación nueva, servicio ) en el execute pongo:

Código:

    serverSocket1.Active:=True;
    while not Terminated do
    begin
    ServiceThread.ProcessRequests(True);
    end;


y luego tengo puesto:

Código:

procedure TService1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
showmessage('Se ha conectado 1');
end;

pero cuando me conecto desde el otro equipo no salta el mensaje de que se han conectado ni nada...

Siempre que busco ejemplos de servicios por internet, me salen con timers, pero suelen ser para que hagan algo cada cierto tiempo, y no se si es condición obligatoria tener que usar un timer.

Espero que alguien me pueda echar una mano, porque ya no se que mas probar.

Muchas gracias y perdón por las molestias.

fjcg02 03-01-2013 15:28:00

Un servicio no puede tener instrucciones que usen la interface. Como puede estar dando servicio con la sesión cerrada, no puedes poner showmessage, no hay escritorio donde crear la ventana. Lo normal es que se escriba lo que ocurre en un fichero, en una bbdd y haber una aplicación aparte que lea los ocurrido a través de la lectura del fichero o de la bbdd.

Espero que te sirva de ayuda.

Saludos

movorack 03-01-2013 15:35:22

Hola NeWsP,

Hace un tiempo tuve algunos problemas para hacer que un servicio ejecutara una aplicación en el escritorio... pues encontré una serie de artículos que indicaban que desde vista las cosas habían cambiado con respecto a la sesión donde se ejecutan los servicios y cosas así.

Pues en stackoverflow encuientras esto:
Entrada en StackOverFlow
Cita:

The way to go is named pipes, you'll probably have to take a look at the communication across different Integrity levels.

This article explores how to do this in vista. Although it's written in c++ it's just basic Windows API calls, so it should translate fast enough to Delphi.

If you want to search for more on this subject, this communication is called Inter Process Communication, but a better search term is IPC.
Y la verdad me sirvió bastante, espero que a ti también.

Saludos,

NeWsP 04-01-2013 21:23:31

Muchas gracias a los 2, intentare hacer que escriba en un archivo de texto para ir comprobando si funciona.

La verdad es q me centre con el showmessage y solo queria que saliera el mensaje... y gracias a vosotros ya me he dado cuenta de que me podia morir esperando jejeje

Muchas gracias, y cuando tenga un rato ( que ahora me han salido unos problemillas ) volvere a retomar el tema.

Saludos, y feliz año.

cointec 06-01-2013 22:19:28

Hola, simplemente en el evento de inicio del servicio activa el componente socket y elimina el bucle while que procesa los mensajes del servicio, ya que no es necesario.


La franja horaria es GMT +2. Ahora son las 20:51:38.

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