Newsgroup: it.comp.lang.delphi
Titolo: SOAP

Ciao a tutti, sto cercando di capirci qualcosa su SOAP.
Il mio interesse è in particolare per una comunicazione con delphi
verso un server su web in php+mysql.
In particolare non riesco a capire:
1. la comunicazione può essere bidirezionale? Ovvero, capisco come
prelevare dati dal server, ma non capisco se e come far scrivere sul
server i dati che il client vuole scrivere.
2. Non riesco a capire se è possibile recuperare dal server una
tabella o un risultato di una query, negli esempi che ho trovato si
parla sempre di record unico.
Capisco di parlare proprio delle basi, ma in rete non trovo
documentazione che mi chiarisca, se qualcuno ha qualche link da
propormi, gli/le sarei grato.
Grazie,
Matteo

Soap è un protocollo e non una tecnologia:
http://it.wikipedia.org/wiki/SOAP
Tutorial su soap si trovano non in uno dei soliti siti..
Questa volta entra in gioco un sito diverso, che trovi usando google.
A.

 Questa volta entra in gioco un sito diverso, che trovi usando google.
La cripticità della risposta mi fa capire che il tuo è un modo garbato
per dirmi che non ci ho capito un cavolo..
Non posso che darti ragione, lo avevo premesso...
Purtroppo però stò al livello di prima, visto che la documentazione
che ho trovato parla sempre di web service in delphi o asp (e non in
php), inoltre gli esempi che ho visto passano sempre e solo un record
e in una unica direzione. Sto quindi facendo una fatica bestia a
capire come funziona il meccanismo e come possa essere implementato.
Era questo il senso della mia richiesta.
Ciao,
Matteo

 php),
Cominciamo a mettere un punto fermo...
Il web service nasce per risolvere un grosso problema legato alla
comunicazione (alias invio e/o ricezione di dati) tra sistemi diversi.
Unix non conosce cose come il dcom di windows o le cose della WCF
di .net, giusto x chiarire il concetto...
Analogamente ci sarà un qualcosa su unix che windows non gestisce...
Quindi, un gruppo di aziende si sono inventate il web service.
In piu', visto che ognuno invia i dati secondo un proprio protocollo,
hanno scelto di basare i web service su XML.
Trattandosi di fatto di un file di testo, riesce a leggerlo PERFINO
WINDOWS.
Quindi, il concetto di web service "scritto in c#, java, delphi, c++,
powerbuilder..etc etc" ha senso
SOLO ed ESCLUSIVAMENTE ai fini IMPLEMENTATIVI...
Cioè, in c# lo scrivi in un modo in delphi in un altro e cosi via.
Ma il w.s. nasce per essere usato (in genere si preferisce il termine
"consumato"...) a prescindere dalle piattaforme su cui girano il
client e il server...
Percio':
1) se tu vuoi capire come scrivere un web service in delphi, sui
soliti siti trovi del materiale
2) se tu vuoi capire come scrivere un web service in c#, il posto dove
cercare informazioni è ovviamente scontato
3) se tu vuoi capire come scrivere un web service in java, come sopra
4) se tu vuoi capire come scrivere un web service in php, non so...
Riguardo il fatto di resituire n records....
Tipicamente, un pacchetto xml permette di creare una struttura ad
albero.
Ad esempio, tu potresti avere un web service che riceve come parametro
un "qualcosa" che permetta di:
-aprire una connessione ad un database
-lanciare una query
-ciclare al solito modo while not eof do....
-ad ogni iterazione aggiunge un nodo ad un pacchetto dati in formato
xml e gli sbatte dentro i dati dei campi
-chiude la query
-invia il pacchetto xml generato al richiedente.
O, al contrario, il web service puo' accettare come parametro un
pacchetto dati xml che contiene n nodi uno per ogni record da inviare.
Al suo interno, decodifica i dati e li scrive nel db, creando una
risposta che contiene un qualcosa per ogni record processato.
Importante: se c'è stato un errore lato server, il messaggio di errore
e tutto il resto deve essere restituito al client, altrimenti col
c@@@o che capisci cosa è andato storto...
Lo so..Ti sembra ovvio....Magari lo fosse.
Non lo è...In troppi gli errori li NASCONDONO e non li RISOLVONO...
Vedi quelle cose del tipo:
try
  Fai
except
end;
Oppure ci sono i furbi:
try
  Fai
except
  ShowMessage('si è verificato un errore')
end;
Io stesso ho tozzato con u w.s. che restituita true/false senza dirti
niente del XCHE un record non era stato processato....
Tornando a noi...Per ovvi motivi, queste operazioni dovrebbero prima
di tutto essere VELOCI e limitare la quantità di dati da inviare e
ricevere.
XML viaggia NON COMPRESSO per motivi di comatibilità.
Quindi, se mandi indietro 1 giga di dati FORSE il tuo amministratore
di rete potrebbe un po incazzarsi...
Infine, giusto x essere chiari, questa cosa di cui parli tu l'ho fatta
x un palmare con vs2005 + cf2.0 + m$sqlce (brrrrrrr...).
E NON HO USATO WEB SERVICE! E mo ti stupisco ancora di +: FUNZIONA!
Il server web usa asp2.0..niente .net, quindi..!
Pax vobiscum.
A.

 4) se tu vuoi capire come scrivere un web service in php, non so...
:D appunto...
Per la cronaca, per ora ho trovato la libreria nusoap, negli esempi
puoi prelevare dati usandola come server o puoi farle leggere dati da
un altro web server ma se io volessi scrivere dati???
Ma comunque mi rendo conto che sto andando OT, qui parliamo di
delphi!!
Ciao,
Matteo

 delphi!!
infatti...
Pax vobiscum.
A.