Consultor Eletrônico



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.