Wiederum als Erinnerungshilfe für gSOAP Client auf Linux (eLux in dem Fall) gegen .NET Web Service (die alte Version, die mit .asmx). Durchgeführt auf einem Windows 10 Rechner mit WSL + Ubuntu 16.04 (!!).
build-essential, bison, flex, openssl, libssl-dev installieren
automake 1.16 deb installieren
gSOAP Sourcen runterladen/entpacken (im Beispiel Version 2.8.93 im Codeverzeichnis)
./configure
make
sudo make install
wsdl2h -c -o service.h https://whereever/whatever/service.asmx
soapcpp2 -c service.h
#include "soapH.h" // wird von soapccp2 erzeugt #include "ServiceSoap.nsmap" // wird von soapccp2 erzeugt int main(int argc, char** argv) { struct soap *soap = soap_new(); struct _tempuri__MethodResponse Result; soap->ssl_flags = SOAP_SSL_NO_AUTHENTICATION; if (soap_call___tempuri__Method(soap, NULL, NULL, NULL, &Result) == SOAP_OK) { printf("Result: %s\n" , Result.MethodResult); } else soap_print_fault(soap, stderr); }
“Method” ist der Name der Methode. In dem Fall gibt das Ding nur einen String zurück und hat keine Parameter (die letzte NULL vorm &Result beim Aufruf).
“tempuri” ist der Namespace des Services (Attribut [Namespace] im ASMX). Muss man ggf. aus dem erzeugten service.h ermitteln.
g++ -o service -DWITH_OPENSSL service.c soapC.c soapClient.c ./gsoap_2.8.93/gsoap-2.8/gsoap/stdsoap2.c ./gsoap_2.8.93/gsoap-2.8/gsoap/libgsoapssl.a -lssl -lcrypto
-DWITH_OPENSSL für Services auf HTTPS (bedingt -lssl und -lcrypto) – müssen hinter den Inputfiles stehen!
soapC.c und soapClient.c werden von soapcpp2 erzeugt
stdsoap2.c und libgsoapssl.a werden beim Build von gSOAP erzeugt – .a weil Library dann statisch gelinked wird (auf eLux nicht vorhanden).