Newsgroup: it.comp.lang.delphi
Titolo: Comunicare con server web

Ciao a tutti, ho questa situazione:
pc host dove risiede applicativo delphi e server web IIS vorrei che da 
una pagina php in un particolare punto del codice eseguito (che so al 
termine di un operazione di registrazione dati sul database) venga 
comunicato qualcosa all'applicativo delphi.
Non ho idea di che tecnica usare e/o quale componente.
Lumi ?
Omega

fai scrivere un file di qualche tipo alla app web...potrebbe farlo
l'isapi.
La app delphi avrà un sistema di polling che ogni n secondi cerca quei
files e se ne trova uno lo processa.
Per il polling puoi usare WaitForSingleObject con gli opportuni
parametri del caso.
AS

Alberto Salvati ha scritto:

Il sistema a timer l'avevo già pensato anche io ma mi pare un pò 
limitante. Non esiste un'altro modo a parte quello di usare le indy server ?
  Omega

 Non esiste un'altro modo a parte quello di usare le indy server ?
Poche info relative al tuo problema.
AS

 
Dunque provo a descrivere meglio il problema.
Ho un applicativo delphi che è un gestionale.
Il server web gestisce, dalle pagine php, l'interazione con un database 
mysql, quando si completa la registrazione dei dati devo comunicare la 
cosa all'applicativo delphi.
Ho provato le indy server inviando un comando http su una porta usata 
dal componente indy server che cattura il comando stesso OK.
Questo però implica l'uso del componente server che occupa risorse.
Vorrei quindi bypassare la cosa e far si che dal php vengano comunicate 
le informazioni direttamente all'applicativo delphi che intanto deve 
fare altro lavoro.
Non sò .. fare una dll, usare i messaggi di Windows.... comunque vorrei 
che la comunicazione avvenga con certezza e velocemente senza tempi di 
attesa.
Omega

 attesa.
Potresti fare una CGI sempre in Delphi che spedisce un messaggio
all'applicazione, potrebbe risultare un programmino di pochi Kb che non
impatta minimamente sulle prestazioni anche considerando i tempi di
caricamento, esecuzione e free del CGI.
Casomai fai una googlata con "delphi cgi" e trovi un po' di esempi
ciao, Vittorio
P.S.: Do per scontato che il server sia Win visto che parli di IIS.

 ha scritto nel messaggio 
news:6Xo3f.45229$TR5....@news.edisontel.com...


 parametri del caso.
WaitForSingleObject non è usabile per questo scopo.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 dal componente indy server che cattura il comando stesso OK.
Credo sia la strada migliore, anche perché non ti obbliga ad avere
l'applicazione sulla stessa macchina.


The WaitForSingleObject function checks the current state of the
specified object. If the object's state is nonsignaled, the calling
thread enters an efficient wait state. The thread consumes very little
processor time while waiting for the object state to become signaled or
the time-out interval to elapse.
Before returning, a wait function modifies the state of some types of
synchronization objects. Modification occurs only for the object or
objects whose signaled state caused the function to return. For
example, the count of a semaphore object is decreased by one.
The WaitForSingleObject function can wait for the following objects:
Change notification
The FindFirstChangeNotification function returns the handle. A change
notification object's state is signaled when a specified type of change
occurs within a specified directory or directory tree.
AS

Alberto Salvati ha scritto:
<snip>
Alberto, come funziona la WFSO lo so benissimo e ti ribadisco che il suo
uso con FFCN non serve a fare ciò che ci si propone.  Ma anche se per
assurdo lo si potesse fare, monitorare lo stato di un file per la
comunicazione tra due processi è un meccanismo inefficiente e molto poco
sicuro.  Inefficiente perché difatto implementi un "polling" e molto poco
sicuro perché non sai, di fatto, quando quel file non è più in uso (parlo
di uso "logico" del file, non di lock/unlock fisico).  Un'applicazione
potrebbe aprire un file, scrivere, chiuderlo, riaprirlo, appendere
informazioni, richiuderlo, eccc... 
Esistono ALTRE strade per far parlare due applicazioni.  Nel contesto
specifico, l'invio di una richiesta HTTP è senza dubbio la strada migliore
di procedere.


Riguardo il polling, per come sono scritte molte delle api di windows a
volte non hai molta scelta. Riguardo l'accesso al file...
Vero, quel sistema alza l'evento ad ogni variazioni del file e quindi
tu non sai se la scrittura è completa..e questo la dice lunga su come
winsozz funziona, cioè, lavora...
Il trucco consiste nel configurare l'evento per farlo alzare non alla
scrittura del file ma sul cambio degli attrtibuti...
Quando app1 ha finito di creare il file, lo imposta a sola lettura.
Dall'altra parte app2 ha un evento configurato per rilevare la
variazione dell'attributo.
Che poi esistano altre vie e nello specifico una richiesta http sia LA
SOLUZIONE, quoto.
AS
PS:
Bentornato, Andrea, Ke kazzo di fine avevi fatto?
Avevi vinto un supernalotto e ti 6 magnato tutto?
Oppure eri alle 6shell con la tua segretaria 90-60-90?
:-)

 winsozz funziona, cioè, lavora...
Il problema non è di Windows, il problema è la tecnica utilizzata.
Tu non saprai MAI, visti i vari livelli di cache (del sistema 
operativo, delle librerie del compilatore, ecc...), quando 
effettivamente una scrittura è completa.  Anche sapendo quando la 
scrittura è completa, anche sapendo quando il file è chiuso, non 
hai un modo sicuro per accedervi.  E' l'applicazione che deve 
segnalare quando ha terminato le proprie elaborazioni.