Newsgroup: it.comp.lang.delphi
Titolo: VPN e web service

Devo consumare un web service che è su un computer al quale devo 
accedere tramite VPN.
 
La connessione alla VPN è attiva e funzionante prima di far partire il 
programma Delphi.
 
Ho scaricato il WSDL e l'ho importato in una unit che, ovviamente, uso 
all'interno del programma principale.
 
Uso un THTTPRio e setto la proprietà URL con i parametri corretti.
 
Al momento di usare il web service Delphi mi dice che il file non è 
stato trovato.
 
Usando SoapUI con lo stesso WSDL ed impostando lo stesso URL impostato 
in Delphi tutto funziona alla perfezione ed ottengo la risposta del web 
service. Quindi non esistono problemi di connessione alla VPN altrimenti 
non funzionerebbe nemmeno da SoapUI.
 
Dove può essere il problema?
 
-- 
@WarpTen10

Versione di delphi?
 
A.

 Versione di delphi?
 
XE5/Windows7
 
 
-- 
@WarpTen10

 stato trovato.
Cosa non ha trovato, il wsdl sul server?
DEscrivi l'errore con tutte le info che hai.
 
-- 
Morde

 DEscrivi l'errore con tutte le info che hai.
 
Nel messaggio d'errore riguardante il file non trovato mi compare l'URL 
con il SOAPAction vuoto.
 
--Esempio del messaggio d'errore--
Il file specificato non è stato trovato : 
http://www.pincopallino.it/service/servizio
 SOAPAction ""
----
 
Devo accedere a 
www.pincopallino.it
 tramite la VPN.
 
Ho provato anche ad usare l'indirizzo del WSDL ma ottengo lo stesso 
errore, ovviamente con l'indirizzo del WSDL.
 
L'errore compare nel momento in cui devo usare il web service.
 
Uso, come già detto, un THTTPRio.
 
Non penso sia un problema di VPN perché la stessa richiesta al web 
service fatta tramite SoapUI usando lo stesso WSDL funziona perfettamente.
 
Mi spiace non poter essere più esaustivo, ma non posso accedere al 
progetto in questo momento.
 
-- 
@WarpTen10

La butto li:
 
non è che httprio (mai usato quindi potrei dire cazzate..) ha una property da impostare per evitare reindirizzamenti strani? Magari tu pensi che passa da vpn e invece lui passa dal web e quindi quell'indirizzo non lo trova.
Se usi l'indirizzo IP e non 
www.pincopallino.it
 che risultato ottieni?
 
Magari una prova veloce, senza toccare il codice , potrebbe essere cambiare l'ordine dei protocolli di rete del pc, impostando per primo RDOP e poi TCP...?
 
A.
 
 
 
 
2) non conosco soapui,

 Dove può essere il problema?
 
Sto lavorando anch'io su un programma che lancia in web service.
Al programma, il tuo, non interessa se gira in vpn, in locale o in altro 
modo, a lui interessa sapere DOVE hai messo il WSDL
che hai utilizzato pe crearti la unit.
 
Quindi se sul tuo pc hai una directory C:\WSDL (come ho nel mio pc) dove hai 
tutti i file .wsdl, sul pc dove APRI la vpn deve essere
presente la stessa directory con gli stessi file che hai sul tuo pc (dove 
compili).
 
Io non ho problemi !!
 
Ciao
 
Daniele
 
PS: su cosa stai lavorando ?? 
 

 2) non conosco soapui
 
Nemmeno io lo conoscevo ma non è nulla di particolarmente complesso. Gli 
dai il WSDL e lui ti permette di gestire la request controllandone il 
risultato.
 
È proprio grazie a SoapUI che sono certo che la mia request, creata in 
Delphi, è corretta.
 
Grazie per le dritte.
 
-- 
@WarpTen10

 PS: su cosa stai lavorando ??
 
Mi spiace ma non posso dirlo. Non voglio fare quello che se la tira ma è 
un progetto per partecipare al quale ho dovuto firmare tanto di lettera 
di NDA.
 
-- 
@WarpTen10

Anni fa ho dovuto firmare una NDA solo per un *colloquio* in una azienda!
 
A.

NDA.
 
OK !
 
Facci sapere come risolverai!
 
ciao
Daniele 
 

 Facci sapere come risolverai!
 
Sicuramente.
 
-- 
@WarpTen10

di file non trovato con il link del WSDL remoto al posto dell'URL.
 
Scusami per stare ancora sulla mia posizione .....
Se dal pc che usi per lavorare (e dove compili) il tutto funziona con questa 
benedetta wsdllocation
(che e' la directory dove hai i file wsdl, per esempio C:\WSDL dove avrai 
C:\WSDL\Pippo.wsdl C:\WSDL\Pluto.wsdl ecc...)
e tutto funziona, una volta compilato il tuo exe non devi fare altro che 
copiare paro paro la directory C:\WSDL con tutti i file
nel server dove andrai ad installare l'exe, cosi' da avere una C:\WSDL sul 
server.
 
Nulla piu'
Se ti sembra troppo banale ..... e' cosi' !
 
Ciao
Daniele 
 


Forse mi sono espresso male dall'inizio, ma io devo solo consumare, lato 
client, un web service che è già disponibile. Non sono io a creare il 
web service del quale ho, comunque, la documentazione.
 
Il web service è accessibile tramite un link attivo solo all'interno di 
una VPN.
 
So che la request che creo in Delphi è corretta perché la uso tramite 
SoapUI e lì la comunicazione avviene senza problemi e la risposta 
ottenuta dal web service è corretta.
 
Il problema è che non riesco ad arrivare al link (l'errore di file non 
trovato) tramite il THTTPRio in Delphi, sia usandone la proprietà URL 
sia la WSDLLocation.
 
È come se per il THTTPRio la VPN non fosse accessibile.
 
Spero d'essermi spiegato meglio, ora.
 
-- 
@WarpTen10

 Dove può essere il problema?
 
"Eureka!" per modo di dire perché ora il programma funziona, ma la 
soluzione mi pare tutto fuorché elegante.
 
Ho copiato il file <program_files>\Embarcadero\RAD 
Studio\12.0\source\soap\Soap.SOAPHTTPTrans.pas nella cartella del 
progetto, inserito un {$DEFINE USE_INDY} nel Soap.SOAPHTTPTrans.pas 
copiato e tutto ora funziona.
 
Ora accedo al web service remoto tramite la VPN e lo posso usare senza 
problemi.
 
Uso l'URL e non la WDSLLocation ma, anche se non ho provato, penso che 
non cambi nulla usare l'uno o l'altra. Proverò la prossima volta che 
posso mettere le mani sul progetto, giusto per togliermi una curiosità.
 
-- 
@WarpTen10

> "Eureka!" 
 
L'hai trovata tu o l'hai beccata sul web? Nel caso puoi postare il link?
 
A.
 

 L'hai trovata tu o l'hai beccata sul web? Nel caso puoi postare il link?
 
Certo che l'ho trovata io... sul web. :)
 
http://codeverge.com/embarcadero.delphi.webservices/compile-with-use_indy/1078748
 
 
-- 
@WarpTen10