View Full Version : Web Service consumieren
Hallo * all,
ich habe eine wsdl-Datei bekommen und muss darüber webservice ansprechen. Das Programm habe ich fertig aber wo soll ich die IP -Adresse von dem WebService eintragen ?
Danke
dschroeder
09-09-14, 10:32
Hallo svit,
ich weiß nicht, ob ich deine Frage richtig verstanden habe. Du musst zum konsumieren des Webservice eine entsprechende url aufrufen. Um das in RPG machen zu können, musst du eine API benutzen, die dir die HTTP-Kommunikation erlaubt.
Wir nutzen da eine Lib, die Scott Klement zur Verfügung stellt.
Der Code für das Konsumieren sieht bei uns dann ungefähr so aus:
url = 'http://hallo.dv.local:8090+
/ProxyService/ProxyService.svc';
SOAP =
'<se:envelope xmlns:se="http://schemas.xmlsoap.org/soap/envelope/" +
xmlns:t="http://tempuri.org/"> +
<se:body> +
<t:dvsipr> +
<t:service>' + %trim(P#_Service) + '</t:service> +
<t:command>' + P#_SrvParm + '</t:command> +
<t:user11>BVS</t:user11> +
<t:password11>Xbba39</t:password11> +
+
</t:dvsipr></se:body> +
</se:envelope>';
HTTP_setCCSIDs(1208: 0); // CCSID 1208 = UTF-8
rc = http_url_post_xml(url
: %addr(SOAP) + 2
: %len(SOAP)
: *NULL
: %paddr(Incoming)
: %addr(String)
: P#_TimeOut
: HTTP_USERAGENT
: 'text/xml; charset=utf-8'
: G#SoapAction);
if (rc <> 1);
P#SCode = Nein;
P#_Result = 'ReturnCode(9999 Web-Service funktioniert nicht)';
else;
P#SCode = Ja;
P#_Result = String;
endif;
Dieter
Hallo Dieter,
ist es nicht so, dass ab 6.1 man ohne API auskommen kann?
dschroeder
09-09-14, 11:44
Ich wüsste nicht, welche RPG Befehle es gibt, die das können. Möglicherweise gibt es eine Möglichkeit über embedded SQL. Das weiß ich im Moment aber nicht.
Dieter
dschroeder
09-09-14, 11:47
Wir haben das mit APIs gemacht, Hier der Link zu Scott Klements Seite:
http://www.scottklement.com/presentations (http://www.scottklement.com/presentations/)
dschroeder
09-09-14, 11:55
Hier ist noch ein interessantes Handbuch über den IBM Integrated Webservice Server. Möglicherweise geht das damit einfacher.
http://www-03.ibm.com/systems/resources/systems_i_software_iws_pdf_WebServicesClient_new.p df
ich habe aus WSDL durch QSH- Befehl:
wsdl2ws.sh -o/xxxx/getxxx
-lrpg
-s/qsys.lib/meilib.lib/getxxx.srvpgm
file:///home/Webservice/xxxService.wsdl
eine SRVPGM erstellt
dann ein Bindeverzeichniss mit QAXIS10CC angelegt. und in das Programm eingebunden.
im Programm habe ich sofort alle Methoden zur Verfügung:
SQl - bla-bla......
if stub_create_IxxxImportTourService(WSStub); WsRequest.Importxxx_Ref.array = SQLBuffer;
if stub_op_Import(WSStub:WsRequest:WsResponse);
else ;
dsply 'Fehler: CSMTOUR' 'QSYSOPR';
endif;
stub_destroy_IxxxService(WSStub);
endif ;
Wenn ich das richtig verstehe muss ich nur die richtige IP Adresse irgendwo eintragen und dann soll alles funktionieren.
Eventuell bei der SRVPRG Erstellung:
wsdl2ws.sh -o/xxxx/getxxx
-lrpg
-s/qsys.lib/meilib.lib/getxxx.srvpgm
HTTP://IP-Adresse:Port/Webservice/xxxService.wsdl
Du kannst Dir auch mal den folgenden Artikel anschauen:
Invoking web services using RPG proxy (http://www.ibm.com/developerworks/ibmi/library/i-amrawsdl2rpg/index.html)
Birgitta
Wenn icn mal nach anderen Beispielen im Netz gehe,
dann müsstte in WSStub.endpoint deine URL rein.
Und wenn es Blank ist, dann sollte die adresse in der WSDL selber stehen
Gruß
Ronald