26 ottobre 2006

WebService C++ su Win32: Axis vs Gsoap2

from the win32-programming dept.

Recentemente mi è capitato di dover sviluppare un'applicazione Windows che sfruttasse della logica di business già realizzata e funzionante su una web application, in particolare il task era quello di sviluppare una semplice utility che permettesse di effettuare ricerche di numeri di telefono, fax ed email sul CRM aziendale senza passare dal'intefaccia LDAP o dal CRM vero e proprio.

Detto fatto: in poco tempo il web service Axis (parte server, in Java) era pronto e attivo sull'application server J2EE. A questo punto già convinto di avere un piano di sviluppo chiaro e preciso mi dirigo sul sito di Axis e scarico la versione C++ dello stesso per poterlo consumare dal lato client.

Bello. Proprio bello. Genero gli stub: ordinati, puliti e perfettamente mappati. Le classi degli oggetti in gioco vengono ricostruite in modo elegante e corretto, senza troppi fronzoli. Il problema è che la versione distribuita dal progetto Apache contiene al suo interno solamente librerie pre-compilate solo per l'ambiente Microsoft Visual Studio, ovvero delle librerie .lib collegate alle rispettive .dll. Beh, ma esiste il tool reimp, direte voi, che permette di usare tali librerie anche sotto il compilatore MinGW! (lo dico solo ora, ma sotto Windows utilizzo l'ambiente Dev-Cpp). Peccato che per questa libreria il tool fallisca a ricostruire correttamente la tabella dei simboli, rendendo di fatto il progetto non compilabile.

La soluzione per usare Axis sarebbe quella di ricompilare la .dll con MinGW, anche se questo richiede tempo ed una buona dose di pazienza (il sistema di build di Axis C++ e' basato su ANT... forse un po' eccessivo, non sarebbe bastato un plain old Makefile?).

Rapido giro sul web e trovo un'altra libreria simile ad Axis, ma a quanto vedo piu' anziana: gsoap2. Scarico subito e provo a rifare daccapo. Gli stub non sono per niente eleganti, ma il tutto e' semplice e pulito. Compilo l'applicazione di cui sopra nella versione testuale e... funziona! Quasi non si avverte la presenza di SOAP e le sue prolisse strutture dati. L'overhead sull'eseguibile della libreria e' veramente ridicolo, roba da 80 Kb o poco piu'. Contro le .dll di Axis di un mega e rotti: a questo punto anche riuscendo ad usare la libreria Apache non so quanto ciò convenga!

Che dire quindi... se dovreste mai fare una cosa del genere e non volete usare tool proprietari, date un'occhiata prima a Gsoap2, potreste risparmiarvi un paio d'ore di lavoro e Kb preziosi su eseguibili e librerie.

tags: , ,

Nessun commento: