Hello,
Can anyone help - I need to run/consume a web-service from a Progress V9.1e client. The web service is up and running and I can run it with no problems from an Openedge (V10) client.
I have tried and failed...
Firstly, here is my working V10 code:
/*v10 code...*/
DEFINE VARIABLE hWebService AS HANDLE NO-UNDO.
DEFINE VARIABLE hWorkFlowWSService AS HANDLE NO-UNDO.
DEFINE VARIABLE o-session AS CHARACTER NO-UNDO.
CREATE SERVER hWebService.
hWebService:CONNECT("-WSDL 'http://rapsbmdev:18793/sbm/services/BizLogic1?wsdl'
-Service WorkFlowWSService
-Port BizLogic1").
RUN VALUE("WorkFlowWS") SET hWorkFlowWSService ON hWebService.
/* Procedure invocation of START operation. */
RUN connect IN hWorkFlowWSService ( INPUT "user",
INPUT "password",
OUTPUT o-session).
MESSAGE "o-session" o-session VIEW-AS ALERT-BOX INFO BUTTONS OK.
RUN DISCONNECT IN hWorkFlowWSService (INPUT o-session).
And here is my (non-working) v9 attempt...
DEFINE VARIABLE v-hSocket AS HANDLE NO-UNDO.
DEFINE VARIABLE v-port AS CHAR NO-UNDO.
DEFINE VARIABLE v-mData AS MEMPTR NO-UNDO.
DEFINE VARIABLE v-iDataSize AS INTEGER NO-UNDO.
DEFINE VARIABLE v-return AS LOGICAL NO-UNDO.
DEFINE VARIABLE o-mData AS CHARACTER NO-UNDO.
DEFINE VARIABLE v-before AS CHARACTER NO-UNDO.
DEFINE VARIABLE v-time AS INTEGER NO-UNDO.
DEFINE VARIABLE v-timeout AS INTEGER NO-UNDO INIT 2.
DEFINE VARIABLE iMessageSize AS INTEGER NO-UNDO INIT 50.
DEFINE VARIABLE lv-xml AS CHARACTER NO-UNDO.
ASSIGN v-port = "-H rapsbmdev -S 18793". /*rapsbmdev*/
ASSIGN lv-xml = '<?xml version="1.0" ?>' +
'<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">' +
'<soap:Body>' +
'<m:connect xmlns:m="http://rapsbmdev:18793/sbm/services/BizLogic1/WorkFlowWSService">' +
'<m:userid xsi:type="xsd:string">rapid</m:userid>' +
'<massword xsi:type="xsd:string">rapid1</massword>' +
'</m:connect>' +
'</soap:Body>' +
'</soap:Envelope>' . /*+ CHR(13) + CHR(10)?*/
SET-SIZE(v-mData) = 0.
SET-SIZE(v-mData) = LENGTH(lv-xml).
PUT-STRING(v-mData,1,LENGTH(lv-xml) ) = lv-xml.
ASSIGN v-before = GET-STRING(v-mdata,1).
MESSAGE "outgoing xml..." SKIP v-before VIEW-AS ALERT-BOX INFO BUTTONS OK.
CREATE SOCKET v-hSocket.
v-hSocket:CONNECT(v-port) NO-ERROR.
IF v-hSocket:CONNECTED() = FALSE THEN
MESSAGE "Not connected." VIEW-AS ALERT-BOX INFO BUTTONS OK.
ELSE
MESSAGE "Connected!" VIEW-AS ALERT-BOX INFO BUTTONS OK.
v-hSocket:SET-READ-RESPONSE-PROCEDURE('ip-ProcessServerResponse':U).
/*SET-BYTE-ORDER(v-mData) = BIG-ENDIAN. */
v-iDataSize = GET-SIZE(v-mData).
MESSAGE "v-iDataSize" v-iDataSize VIEW-AS ALERT-BOX INFO BUTTONS OK.
v-return = v-hSocket:WRITE(v-mData,1,v-iDataSize) NO-ERROR.
IF v-return = FALSE OR ERROR-STATUS:GET-MESSAGE(1) <> '':U THEN
DO:
MESSAGE "failed write" VIEW-AS ALERT-BOX INFO BUTTONS OK.
RETURN.
END.
PAUSE 1.
REPEAT ON STOP UNDO, LEAVE ON QUIT UNDO, LEAVE:
IF v-hSocket:connected() THEN
DO:
IF OPSYS <> "unix" THEN
DO:
IF v-time >= v-timeout THEN
DO:
MESSAGE "giving up - timed out waiting for response" VIEW-AS ALERT-BOX INFO BUTTONS OK.
LEAVE.
END.
WAIT-FOR READ-RESPONSE OF v-hSocket PAUSE 1. /* pause for 1 sec between repeats */
ASSIGN v-time = v-time + 1.
END.
ELSE
DO:
iMessageSize = v-hsocket:GET-BYTES-AVAILABLE().
v-return = v-hsocket:READ(v-mData,1,iMessageSize,2) NO-ERROR.
PAUSE 1.
IF v-return = TRUE AND ERROR-STATUS:GET-MESSAGE(1) = '':U
AND v-before <> GET-STRING(v-mdata,1)
AND GET-STRING(v-mdata,1) <> "" THEN
DO:
RUN ip-processserverresponse.
LEAVE.
END.
ELSE
DO:
IF v-time >= v-timeout THEN
DO:
MESSAGE "giving up - timed out waiting for response" VIEW-AS ALERT-BOX INFO BUTTONS OK.
LEAVE.
END.
ASSIGN v-time = v-time + 1.
END.
END.
END.
ELSE
LEAVE.
END.
v-hSocketISCONNECT() NO-ERROR.
DELETE OBJECT v-hSocket.
PROCEDURE ip-ProcessServerResponse:
DEFINE VARIABLE cTime AS CHARACTER FORMAT "x(65)":U NO-UNDO.
DEFINE VARIABLE iMessageSize AS INTEGER NO-UNDO.
DEFINE VARIABLE v-iCount AS INTEGER NO-UNDO.
IF v-hSocket:CONNECTED() = FALSE THEN
RETURN.
ASSIGN iMessageSize = v-hSocket:GET-BYTES-AVAILABLE().
SET-SIZE(v-mData) = 0.
SET-SIZE(v-mData) = iMessageSize.
v-return = SELF:READ(v-mData,1,iMessageSize,2) NO-ERROR.
IF v-return = FALSE OR ERROR-STATUS:GET-MESSAGE(1) <> '':U THEN
DO:
MESSAGE "failed read" VIEW-AS ALERT-BOX INFO BUTTONS OK.
RETURN.
END.
/* Returned file */
ASSIGN o-mData = GET-STRING(v-mData,1).
MESSAGE o-mdata VIEW-AS ALERT-BOX INFO BUTTONS OK.
END PROCEDURE.
As you can see I'm using sockets directly and constructing my own SOAP message. The connect seems to work ok and the write to socket returns no error. But I am not getting a response from the web-service and I suspect my XML may not be being received or may be incorrect somehow...
Any help would be greatly appreciated! Many Thanks.
Can anyone help - I need to run/consume a web-service from a Progress V9.1e client. The web service is up and running and I can run it with no problems from an Openedge (V10) client.
I have tried and failed...
Firstly, here is my working V10 code:
/*v10 code...*/
DEFINE VARIABLE hWebService AS HANDLE NO-UNDO.
DEFINE VARIABLE hWorkFlowWSService AS HANDLE NO-UNDO.
DEFINE VARIABLE o-session AS CHARACTER NO-UNDO.
CREATE SERVER hWebService.
hWebService:CONNECT("-WSDL 'http://rapsbmdev:18793/sbm/services/BizLogic1?wsdl'
-Service WorkFlowWSService
-Port BizLogic1").
RUN VALUE("WorkFlowWS") SET hWorkFlowWSService ON hWebService.
/* Procedure invocation of START operation. */
RUN connect IN hWorkFlowWSService ( INPUT "user",
INPUT "password",
OUTPUT o-session).
MESSAGE "o-session" o-session VIEW-AS ALERT-BOX INFO BUTTONS OK.
RUN DISCONNECT IN hWorkFlowWSService (INPUT o-session).
And here is my (non-working) v9 attempt...
DEFINE VARIABLE v-hSocket AS HANDLE NO-UNDO.
DEFINE VARIABLE v-port AS CHAR NO-UNDO.
DEFINE VARIABLE v-mData AS MEMPTR NO-UNDO.
DEFINE VARIABLE v-iDataSize AS INTEGER NO-UNDO.
DEFINE VARIABLE v-return AS LOGICAL NO-UNDO.
DEFINE VARIABLE o-mData AS CHARACTER NO-UNDO.
DEFINE VARIABLE v-before AS CHARACTER NO-UNDO.
DEFINE VARIABLE v-time AS INTEGER NO-UNDO.
DEFINE VARIABLE v-timeout AS INTEGER NO-UNDO INIT 2.
DEFINE VARIABLE iMessageSize AS INTEGER NO-UNDO INIT 50.
DEFINE VARIABLE lv-xml AS CHARACTER NO-UNDO.
ASSIGN v-port = "-H rapsbmdev -S 18793". /*rapsbmdev*/
ASSIGN lv-xml = '<?xml version="1.0" ?>' +
'<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">' +
'<soap:Body>' +
'<m:connect xmlns:m="http://rapsbmdev:18793/sbm/services/BizLogic1/WorkFlowWSService">' +
'<m:userid xsi:type="xsd:string">rapid</m:userid>' +
'<massword xsi:type="xsd:string">rapid1</massword>' +
'</m:connect>' +
'</soap:Body>' +
'</soap:Envelope>' . /*+ CHR(13) + CHR(10)?*/
SET-SIZE(v-mData) = 0.
SET-SIZE(v-mData) = LENGTH(lv-xml).
PUT-STRING(v-mData,1,LENGTH(lv-xml) ) = lv-xml.
ASSIGN v-before = GET-STRING(v-mdata,1).
MESSAGE "outgoing xml..." SKIP v-before VIEW-AS ALERT-BOX INFO BUTTONS OK.
CREATE SOCKET v-hSocket.
v-hSocket:CONNECT(v-port) NO-ERROR.
IF v-hSocket:CONNECTED() = FALSE THEN
MESSAGE "Not connected." VIEW-AS ALERT-BOX INFO BUTTONS OK.
ELSE
MESSAGE "Connected!" VIEW-AS ALERT-BOX INFO BUTTONS OK.
v-hSocket:SET-READ-RESPONSE-PROCEDURE('ip-ProcessServerResponse':U).
/*SET-BYTE-ORDER(v-mData) = BIG-ENDIAN. */
v-iDataSize = GET-SIZE(v-mData).
MESSAGE "v-iDataSize" v-iDataSize VIEW-AS ALERT-BOX INFO BUTTONS OK.
v-return = v-hSocket:WRITE(v-mData,1,v-iDataSize) NO-ERROR.
IF v-return = FALSE OR ERROR-STATUS:GET-MESSAGE(1) <> '':U THEN
DO:
MESSAGE "failed write" VIEW-AS ALERT-BOX INFO BUTTONS OK.
RETURN.
END.
PAUSE 1.
REPEAT ON STOP UNDO, LEAVE ON QUIT UNDO, LEAVE:
IF v-hSocket:connected() THEN
DO:
IF OPSYS <> "unix" THEN
DO:
IF v-time >= v-timeout THEN
DO:
MESSAGE "giving up - timed out waiting for response" VIEW-AS ALERT-BOX INFO BUTTONS OK.
LEAVE.
END.
WAIT-FOR READ-RESPONSE OF v-hSocket PAUSE 1. /* pause for 1 sec between repeats */
ASSIGN v-time = v-time + 1.
END.
ELSE
DO:
iMessageSize = v-hsocket:GET-BYTES-AVAILABLE().
v-return = v-hsocket:READ(v-mData,1,iMessageSize,2) NO-ERROR.
PAUSE 1.
IF v-return = TRUE AND ERROR-STATUS:GET-MESSAGE(1) = '':U
AND v-before <> GET-STRING(v-mdata,1)
AND GET-STRING(v-mdata,1) <> "" THEN
DO:
RUN ip-processserverresponse.
LEAVE.
END.
ELSE
DO:
IF v-time >= v-timeout THEN
DO:
MESSAGE "giving up - timed out waiting for response" VIEW-AS ALERT-BOX INFO BUTTONS OK.
LEAVE.
END.
ASSIGN v-time = v-time + 1.
END.
END.
END.
ELSE
LEAVE.
END.
v-hSocketISCONNECT() NO-ERROR.
DELETE OBJECT v-hSocket.
PROCEDURE ip-ProcessServerResponse:
DEFINE VARIABLE cTime AS CHARACTER FORMAT "x(65)":U NO-UNDO.
DEFINE VARIABLE iMessageSize AS INTEGER NO-UNDO.
DEFINE VARIABLE v-iCount AS INTEGER NO-UNDO.
IF v-hSocket:CONNECTED() = FALSE THEN
RETURN.
ASSIGN iMessageSize = v-hSocket:GET-BYTES-AVAILABLE().
SET-SIZE(v-mData) = 0.
SET-SIZE(v-mData) = iMessageSize.
v-return = SELF:READ(v-mData,1,iMessageSize,2) NO-ERROR.
IF v-return = FALSE OR ERROR-STATUS:GET-MESSAGE(1) <> '':U THEN
DO:
MESSAGE "failed read" VIEW-AS ALERT-BOX INFO BUTTONS OK.
RETURN.
END.
/* Returned file */
ASSIGN o-mData = GET-STRING(v-mData,1).
MESSAGE o-mdata VIEW-AS ALERT-BOX INFO BUTTONS OK.
END PROCEDURE.
As you can see I'm using sockets directly and constructing my own SOAP message. The connect seems to work ok and the write to socket returns no error. But I am not getting a response from the web-service and I suspect my XML may not be being received or may be incorrect somehow...
Any help would be greatly appreciated! Many Thanks.