Kbase P128322: How to deal with a hung web service
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  13/12/2010 |
|
Status: Verified
GOAL:
How to deal with a hung web service
GOAL:
What to do when an external web service exhibits consistent problems resulting in hangs
GOAL:
Sample code to demonstrate using asynchronous web service call
FACT(s) (Environment):
All Supported Operating Systems
OpenEdge 10.1x
FIX:
Below is sample code which connects to and runs methods on an external web service asynchronously and disconnects after a predetermined interval:
DEFINE VARIABLE hWS1 AS HANDLE NO-UNDO.
DEFINE VARIABLE hAsynch AS HANDLE NO-UNDO.
DEFINE VARIABLE cOperation AS CHARACTER NO-UNDO.
DEFINE VARIABLE iSleep AS INTEGER NO-UNDO.
DEFINE VARIABLE iCount AS INTEGER NO-UNDO.
DEFINE VARIABLE lError AS LOGICAL NO-UNDO.
CREATE SERVER hWS1.
hWS1:CONNECT("-WSDL :/?wsdl">http://<webserver>:<portnumber>/<path+name>?wsdl").
IF NOT hws1:CONNECTED() THEN
LEAVE.
cOperation = "<operationname>".
iSleep = 100000.
/* Async */
DO WHILE iCount LT iSleep AND NOT lError:
IF iSleep EQ 0 THEN
RUN VALUE(cOperation) ON hWS1 ASYNCHRONOUS SET hAsynch
EVENT-PROCEDURE "test" NO-ERROR.
PROCESS EVENTS.
iCount = iCount + 1.
RUN ErrorInfo ( INPUT cOperation,
OUTPUT lError ).
END. /* Async */
hWS1:DISCONNECT() NO-ERROR.
DELETE OBJECT hWS1 NO-ERROR.
PROCEDURE ErrorInfo:
DEFINE INPUT PARAMETER pcOperation AS CHARACTER NO-UNDO.
DEFINE OUTPUT PARAMETER plError AS LOGICAL NO-UNDO
INITIAL FALSE.
DEFINE VARIABLE iCounter AS INTEGER NO-UNDO.
IF ERROR-STATUS:ERROR THEN DO:
plError = TRUE.
DO iCounter = 1 TO ERROR-STATUS:NUM-MESSAGES:
MESSAGE ERROR-STATUS:GET-MESSAGE(iCounter)
VIEW-AS ALERT-BOX.
END.
END.
ELSE
plError = FALSE.
END PROCEDURE.
PROCEDURE test:
/* <process stuff...> */
END PROCEDURE.