* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Aprile 27, 2024, 01:31:08 pm

Inserisci il nome utente, la password e la durata della sessione.

268 Visitatori, 0 Utenti

Autore Topic: Consumare un webservice con Lazarus utilizzando SOAP e WSDL  (Letto 10070 volte)

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Consumare un webservice con Lazarus utilizzando SOAP e WSDL
« il: Maggio 30, 2014, 04:40:12 pm »
Ciao a tutti :D

Dopo un periodo di "scarico" vorrei riprendere a pastrugnare con Lazarus, magari cercando di imparare qualcosa di nuovo.

Avrei in mente un progettino che dovrebbe interrogare gli archivi di Google tramite SOAP e WSDL e, dopo avere interpretato i dati raccolti, restituirli in una grid.

Per ora sono partito da qui: http://wiki.lazarus.freepascal.org/Web_Service_Toolkit e ho potuto vedere che l'importer wsdl funziona abbastanza bene. Per ora sono fermo lì  ;D

Qualcuno di voi ha mai avuto a che fare con questa tecnologia? E, nel caso specifico, mai provato a interfacciarsi con google? Problematiche affrontate?

Insomma, accetto qualsiasi suggerimento  ;)


xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Consumare un webservice con Lazarus utilizzando SOAP e WSDL
« Risposta #1 il: Maggio 30, 2014, 07:01:50 pm »
Non conosco questa tecnologia...di cosa si tratta?
Ieri è passato, domani è futuro, oggi è un dono...

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:Consumare un webservice con Lazarus utilizzando SOAP e WSDL
« Risposta #2 il: Maggio 30, 2014, 07:20:52 pm »
Tempo fa ho fatto qualcosa per eBay, si tratta sempre di web services, però avevo trovato una libreria a pagamento e l'ho acquistata perchè le api eBay sono mostruose e non avevo voglia di impazzire.

Con google non ho esperienza.

L'unico consiglio che ti voglio dare è di vedere se ararat synapse offre qualcosa.
Il motivo è semplice, di solito quando si lavora con i web services si ha a che fare con non-blocking socket. Teoria molto bella ma dopo l'esperienza con eBay mi sono drasticamente convertito al blocking socket!

Immagina di lanciare più di una ricerca contemporaneamente, dopo un po' arrivano un po' di risposte, a casaccio, tutte insieme...
Secondo me il multithreading deve essere fatto con i thread e blocking-sockets. Programmazione molto più lineare e pulita: mi riferisco ad esempio alla possibilità di usare try...except e/o try...finally in modo sicuro (e scusa se è poco).
Ci sono poi altri vantaggi tipo la possibilità di killare i thread e così via. Con i non-blocking sockets non usi i thread ma si torna un po' allo spaghetti programming :D

Vabbè, è una mia opinione, condivisibile o no. ;)


« Ultima modifica: Maggio 30, 2014, 07:24:43 pm da nomorelogic »
Imagination is more important than knowledge (A.Einstein)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Consumare un webservice con Lazarus utilizzando SOAP e WSDL
« Risposta #3 il: Giugno 02, 2014, 10:47:50 pm »
WSDL
Non è altro che un descrittore.
Un xml ... alla fine ;) http://www.w3.org/TR/wsdl
SOAP .. idem :D
http://it.wikipedia.org/wiki/SOAP

(I link sono per xinyiman)
"Tencologie" webbe ...

Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:Consumare un webservice con Lazarus utilizzando SOAP e WSDL
« Risposta #4 il: Giugno 03, 2014, 10:36:15 am »
WSDL
Non è altro che un descrittore.
Un xml ... alla fine ;) http://www.w3.org/TR/wsdl
SOAP .. idem :D
http://it.wikipedia.org/wiki/SOAP

(I link sono per xinyiman)
"Tencologie" webbe ...

Stilgar

Grazie Stilgar :)
Ieri è passato, domani è futuro, oggi è un dono...

Legolas

  • Global Moderator
  • Sr. Member
  • *****
  • Post: 366
  • Karma: +3/-0
Re:Consumare un webservice con Lazarus utilizzando SOAP e WSDL
« Risposta #5 il: Giugno 03, 2014, 05:46:57 pm »
Rispondo solo ora perché mi sono preso un week-end in famiglia lontano da tutto (l'unico contatto con internet era Youtube per i cartoni di Peppa Pig e della Pimpa per il pupo, che altrimenti non mangia...  ::) ;D )

Comunque grazie! Ho cercato un po' in rete e ho trovato un articolo per Delphi XE2 e, dopo qualche affanno, sono riuscito a farlo funzionare anche con Lazarus. Si tratta di un semplice programmino che controlla la validità del VAT dei membri di uno Stato europeo.

Occorre prima di tutto generare le unit dal file WSDL disponibile qui:
http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
che, grazie all'aiuto di WST è un'operazione da un paio di click :D

Il progetto richiede un tedit (edVAT) e un tbutton (btnVAT). Bisogna aggiungere wst_synapse e wst_core tra i packages richiesti dal progetto, oltre che aggiungere tra gli uses le unit generate da WST.


Senza dilungarmi troppo, per chi fosse interessato, ecco il codice:
Codice: delphi [Seleziona]

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  checkVatService, checkVatService_proxy,
  urn_ec_europa_eu_taxud_vies_services_checkVat_types,
  synapse_http_protocol;

type

  { TForm1 }

  TForm1 = class(TForm)
    btnVAT: TButton;
    edVAT: TEdit;
    procedure btnVATClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.btnVATClick(Sender: TObject);
var
  WS: checkVatPortType;
  inp: checkVat_Type;
  outp: checkVatResponse;
begin
  SYNAPSE_RegisterHTTP_Transport();
  WS := wst_CreateInstance_checkVatPortType();
  inp := checkVat_Type.Create;
  try
    inp.countryCode := Copy(edVAT.Text,1,Pos(#32,edVAT.Text)-1);
    inp.vatNumber := Copy(edVAT.Text,Pos(#32,edVAT.Text)+1,255);
    outp := WS.checkVat(inp);
    if outp.valid then
      ShowMessage('OK: ' + outp.name + #13#10 + outp.address)
    else ShowMessage(outp.vatNumber + ' not OK')
  finally
    inp.Free;
    outp.Free
  end
end;

end.



E' solo un inizio, ma ora credo di aver capito come funziona il tutto :)

Ettore Cicinelli

  • Newbie
  • *
  • Post: 6
  • Karma: +0/-0
Re:Consumare un webservice con Lazarus utilizzando SOAP e WSDL
« Risposta #6 il: Giugno 24, 2023, 08:13:08 pm »
Salve, scusate sono nuovo in questo forum, ma sto cercando di imparare a programmare in Lazarus, avevo letto l'articolo del Dr. Bob's riguardo l'incorporazione del VIES in Delphi, poi per fortuna ho trovato la versione in lazarus proposta da Legolas ed ho eseguito le istruzioni fedelmente. Alla fine quando cerco di compilare il progetto mi da sempre il seguente errore:"checkVatService_proxy.pas(...)Error:Identifier not found "urn_ec_europa_eu_taxud_vies_services_checkVat_types" e successivamente: checkVatService_proxy.pas(...) Error: interface type expected, but got "<erroneus type>", non trova quell'identificatore anche se c'è. Non capisco.
Grazie per l'attenzione e scusate in anticipo se ho sbagliato qualcosa.

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Consumare un webservice con Lazarus utilizzando SOAP e WSDL
« Risposta #7 il: Giugno 24, 2023, 09:03:36 pm »
Ripartiamo da zero.

Prima cosa devi scaricare il file "checkVatService.wsdl" dal link indicato (http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

Poi dal OPL (Online Package Manager) devi scaricare ed installare il componente WST con tutti i suoi collegati.

Ora possiamo continuare.

Dalla voce di menu "Progetto/Web Services Toolkit" scegli "Import WDSL file" ti si aprirà un pagina e imposta il file di input (scaricato prima) e la directory dove verranno generati i wrapper pascal.

Se tutto OK, allora hai tutto.

PER USARE I WRAPPER GENERATI, vai nel menu "Progetto/Opzioni di progetto" e sotto "Opzioni Compilatore/Percorsi" devi aggiungere  la path dove ci sono i wrapper appena generati nella prima linea a destra "Altri file unit (-Fu):".

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Consumare un webservice con Lazarus utilizzando SOAP e WSDL
« Risposta #8 il: Giugno 24, 2023, 09:53:00 pm »
Aggiornamento, devi portare due modifiche ai wrapper creati.

Nel file "checkvatService_proxy.pas" alla riga 19 devi eseguire la sostituzione come indicato qui sotto:

Codice: [Seleziona]
  
//Dichiarazione orignale
  //TcheckVatPortType_Proxy=class(TBaseProxy,urn_ec_europa_eu_taxud_vies_services_checkVat_types.checkVatPortType,urn_ec_europa_eu_taxud_vies_services_checkVat_types.checkVatPortTypeEasy)

//Dichiarazione corretta
  TcheckVatPortType_Proxy=class(TBaseProxy, checkVatService.checkVatPortType, CheckVatService.checkVatPortTypeEasy)

e alla riga 69 (o giù di li) sempre dello stesso file:

Codice: [Seleziona]
class function TcheckVatPortType_Proxy.GetServiceType() : PTypeInfo;
begin
  result := TypeInfo(checkVatService.checkVatPortType);
end;

Ultima cosa: l'immisione della partita IVA è:

 codice paese (le due lettere internazionali, per l'Italia è IT)
 SPAZIO
 PARTITA IVA

Ciao
« Ultima modifica: Giugno 24, 2023, 10:03:21 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Ettore Cicinelli

  • Newbie
  • *
  • Post: 6
  • Karma: +0/-0
Re:Consumare un webservice con Lazarus utilizzando SOAP e WSDL
« Risposta #9 il: Giugno 24, 2023, 10:11:55 pm »
Grazie infinite per la sollecita risposta, ma avevo già fatto quasi tutto come hai detto, non avevo collegato soltanto i wrapper generati con l'opzione "Compilatore/Percorsi", ma li avevo riposti nella stessa dir del progetto e li avevo lanciati manualmente. Comunque anche così ottengo sempre i 2 errori che avevo detto nel precedente nella unit checkVatService_proxy.
Grazie comunque e se vi sovviene altro alla soluzione del problema ve nesarei grato.

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Consumare un webservice con Lazarus utilizzando SOAP e WSDL
« Risposta #10 il: Giugno 24, 2023, 10:41:49 pm »
Questo è il progetto completo perfettamente funzionante in Windows 64 bit.

E' implementato con Indy, se non usi Indy ma Synapse basta che togli i riferimenti a Indy (Uses e Prima riga dell'evento del bottone) e ripristini quelli di Synapse.

In Analizzatore Progetti hai un riferimento  a wst_Indy, togli quello ed inserisci wst_Synapse.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Ettore Cicinelli

  • Newbie
  • *
  • Post: 6
  • Karma: +0/-0
Re:Consumare un webservice con Lazarus utilizzando SOAP e WSDL
« Risposta #11 il: Giugno 24, 2023, 10:43:41 pm »
fatto ma ora alla riga 19 segna comunque errore e mi dice Error: Identifier not found "CheckVatService"  ed Error: interface type expected, but got "<erroneus type>"

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:Consumare un webservice con Lazarus utilizzando SOAP e WSDL
« Risposta #12 il: Giugno 24, 2023, 10:46:12 pm »
Il progetto che ti ho postato è perfettamente funzionante.

Che versione di Lazarus / FPC usi ? Che SO usi ?
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

Ettore Cicinelli

  • Newbie
  • *
  • Post: 6
  • Karma: +0/-0
Re:Consumare un webservice con Lazarus utilizzando SOAP e WSDL
« Risposta #13 il: Giugno 25, 2023, 06:48:39 am »
ok grazie infinite, così funziona perfettamente.

Ettore Cicinelli

  • Newbie
  • *
  • Post: 6
  • Karma: +0/-0
Re:Consumare un webservice con Lazarus utilizzando SOAP e WSDL
« Risposta #14 il: Giugno 25, 2023, 06:50:05 am »
Comunque lazarus v.2.2.6, S.O Windows 11 versione 22H2

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18776
  • Topic in totale: 2234
  • Online Today: 327
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 268
Total: 268

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.