Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-10-2005
nicohug nicohug is offline
Registrado
 
Registrado: oct 2005
Posts: 9
Poder: 0
nicohug Va por buen camino
ProcessMessage en un WebService

Necesito saber como puedo hacer algo como un Application.ProcessMessage en un WebService (CGI) del lado der servidor

Última edición por nicohug fecha: 20-10-2005 a las 19:48:16.
Responder Con Cita
  #2  
Antiguo 20-10-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.927
Poder: 26
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Que es lo que quieres hacer?
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 20-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No sé yo si no sería mejor que implementaras el asunto en un "TThread", pero, es igual, tampoco sé si lo que diré ahora funcionará tampoco. Se trata de añadir la unidad "Forms" en donde precises hacer uso del método que refieres, pues este es de la clase "TApplication", la cual se define en dicha unidad. Bienvenido al ClubDelphi, por cierto.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 20-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

mamcx 1 - dec 0

__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 20-10-2005
nicohug nicohug is offline
Registrado
 
Registrado: oct 2005
Posts: 9
Poder: 0
nicohug Va por buen camino
Gracias por la bienvenida

Bueno lo que necesito hacer es lo siguiente: en un servicio web implemento una funcion del lado del servidor que un punto lanzo x numero de hilos que realizan un trabajo en conjunto. La cuestion es que luego que lanzo los hilos debo esperar que todos terminen su trabajo y asi devolver el correspondiente resultado. En una aplicacion normal una forma de resolverlo es simplemente: lanzo los hilos y coloco un ciclo como el que sigue:

while not SeDetuvieronLosHilos do
Application.processMessages;

Siendo "SeDetuvieronLosHilos" una variable buleana global que cuando se terminan los hilos pasa a ser true. De esta forma tranco el metodo hasta que se terminen los hilos sin tildar la aplicacion.
Ahora el problema es que, como bien alguien me respondio, el metodo "processMessages" es de la clase TApplication, y esa clase no esta cuando se esta haciendo una SoapApplication del lado del servidor, ya sea con CGI o ISAPI. La pregunta es: como consigo el mismo resultado, es decir esperar a que termine una serie de hilos lanzados, en un servicio web (del lado del server)
Responder Con Cita
  #6  
Antiguo 21-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. Veo que metí la pata por no leer convenientemente. Lo que yo leí (mal) fue algo que tuviera que ver con un Servicio de Windows, y no con un WebService, con los que además no tengo experiencia ninguna: con los primeros tengo poca, pero algo, al menos.

No sé ahora qué responderte. Se me ocurre algo que creo que se planteó alguna vez en estos Foros como una posible solución: si estás empleando "TThread", creo que podrías valerte de los métodos de dicha clase; si no me equivoco cuentan con alguno que "te avisará" cuando se termine la ejecución de un Hilo en concreto. Así podría hacerse con los demás, supongo, esperando cooperar en algo, vaya.

Aquí la descripción del método "Terminate" de la clase "TThread":


Cita:
Empezado por Ayuda de Delphi
Signals the thread to terminate by setting the Terminated property to true.

Terminate sets the thread’s Terminated property to true, signaling that the thread should be terminated as soon as possible.

For Terminate to work, the thread's Execute method and any methods that Execute calls should check Terminated periodically and exit when it's true.

Unlike the Windows API TerminateThread, which forces the thread to terminate immediately, the Terminate method merely requests that the thread terminate. This allows the thread to perform any cleanup before it shuts down.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 21-10-2005
nicohug nicohug is offline
Registrado
 
Registrado: oct 2005
Posts: 9
Poder: 0
nicohug Va por buen camino
Unhappy Sigue

Ok gracias, si la clase ttherad tiene un puntero a metodo que se dispara cuando termina pero ese no es mi problema sino como hacer para que la aplicacion espere hasta que terminen los hilos, igual creo que voy a tener que usar otro lenguaje porque creo que no se puede (uso delphi 7)
Responder Con Cita
  #8  
Antiguo 21-10-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.927
Poder: 26
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
El problema que describes es generico, asi que cambiando de lenguaje no se va a a solucionar.

Se soluciona es con un entendimiento mas completo de lo que son threads:

http://www.pergolesi.demon.co.uk/prog/threads/ToC.html

http://delphi.about.com/od/kbthread/

http://www.midnightbeach.com/jon/pub.../MsgWaits.html

Pero como aprenderas rapido, la programacion de threads es de locos. La verdad no se ha llegado a una solucione completamente clara pero si hay ya concenso en como hacer las cosas.

La forma mas estable (la tradicional es usar WaitFor) es aprovecharse de las API de mensajes (asi como los que usan los controles de windows!). La idea es que se llama mensajes y un evento "escucha" cuando le llega el mensaje de que el thread X ya se completo, y espera a los otros. Es muy facil de programar.

Pero en definitiva, mejor lee largo y tendido sobre el tema, para que veas la luz
__________________
El malabarista.
Responder Con Cita
  #9  
Antiguo 22-10-2005
nicohug nicohug is offline
Registrado
 
Registrado: oct 2005
Posts: 9
Poder: 0
nicohug Va por buen camino
Gracias

Bueno muchisimas gracias por laa respuestas pero sigo pensando que el problema esta en la forma en que delphi implementa los servicios web, y no en los hilos en si, ya que lo que quiero hacer lo he hecho facilmente en una aplicacion normal y no me ha dado ningun problema. Bueno si por casualidad algien sabe como hacer andar el metodo DeleteFile en un Servicio Web (siempre el problemita esta del lado del servidor) y el metodo WinExec tambien se lo agradeceria (aclaro que estos metodos como a todos ustedes funcionan de maravilla en una plicacion normal, el drama como vengo diciendo, es cuando quiero implementar lo mismo con un servicio web).
Saludos y gracias
Responder Con Cita
  #10  
Antiguo 22-10-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.927
Poder: 26
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
El problema no es de la implementacion de Delphi sobre servicios Web. Es simplemente que el desarrollo Web es fundamentalmente diferente de las aplicaciones normales. Y definitivamente, no existe razon en esta tierra de llamar a ProcessMessages.

Ademas, que WinExec es un API obsoleta y se debe usar CreateProcess, en fin...

Entiende que un servicio web o pagina web YA esta dentro de un proceso y de un thread. Lo que quieres es llamar a procesos externos, y por default, no es asi de facil ya que el servicio web debe estar corriendo en una cuenta de usuario limitada (el usuario anonimo) lo que limita mucho lo que se puede hacer.

Una solucion muy simple, seria crear un componente ActiveX, en el cual puedes programar de la forma local como estas acostumbrado, pero debes crearlo como EXE y darle los permisos respectivos.

Con respecto a lo borrar archivos, no veo que problema puedas tener, excepto uno de seguridad o de concurrencia...
__________________
El malabarista.
Responder Con Cita
  #11  
Antiguo 22-10-2005
nicohug nicohug is offline
Registrado
 
Registrado: oct 2005
Posts: 9
Poder: 0
nicohug Va por buen camino
Ok

Ok gracias voy a probar lo que me decis es cierto uno a veces se enoja con la herramienta y el problema muchas veces no es de ella sino que no la conoce bien, lo de eliminar archivos la verdad que me sigue llamando la atencion y suponia que debia ser como vos me decis un problema de seguridad, no sabes si eso se puede configurar o las limitaciones son inherentes al hech de trabajar con un servicio web?
Responder Con Cita
  #12  
Antiguo 24-10-2005
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.927
Poder: 26
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Si. Si el servicio web corre sobre IIS se le asigna por defecto el permiso de usuario anonimo, el cual, por obvias razones, no puede borrar archivos.

Una solucion es configurando el sitio web para que use autenticacion de windows, si es el caso que el servicio corre en una intranet.... de lo contrario toca impersonar la cuenta de usuario.

Otra solucion es darle al usuario anonimo (NombreEquipo\ASPNET sobre Windows2000 y Windows XP o NT Authority\Servicio Red sobre Windows 2003 en español o NT Authority\Network Service sobre windows 2003 en ingles) permisos de modificacion sobre la carpeta del archivo. Es mejor que todo lo modificable quede en una carpeta <> root del sitio web asi es mas facil manejar la seguridad...
__________________
El malabarista.
Responder Con Cita
  #13  
Antiguo 24-10-2005
nicohug nicohug is offline
Registrado
 
Registrado: oct 2005
Posts: 9
Poder: 0
nicohug Va por buen camino
Smile Gracias

Ok gracias voy a ponerme a provar hoy todo lo que me has dicho, un abrazo grande y cualquier cosa vuelvo a escribir
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


La franja horaria es GMT +2. Ahora son las 01:25:20.


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