Webservice don't stop processing after lost connection

fabdeg2003

New Member
Hello all!
I have a wsa app running on openedge 10.2a SP2 and I'm have problem with network lost connection. When my client app lost the connection for some reason the wsa (appserver) application don't stop the process and remaining locking tables until timed out.
Does anybody know how do I tell to my server app that client is gone and imediatly stop and rowback the process?

I am using Tomcat 5.

Thanks in advance!

Fabricio
 
betwin appserver/4GL client and the database is a 30 seconds timeout.
First you have to start the Progress watchdog for your database. Each 30 seconds
this background process cleanup the zombies. (prowdog [databasename]).

Second you can use a undocumented client startup parameter:
-PendConnTime 60 ( default is 30 seconds) ... to fine tunning a network down time-out.
 
Between client and WSA there is no connection at all. They are linked through soap packets only. Actually, only WSA keeps connection to app server while calling Openedge procedure. Thus you cant control that client is gone. There are 3 parameters of WSA you can try to use:
ConnectionLifeTime (number of seconds)
IdleSessionTimeout (number of seconds)
Stale4GLObjectTimeout (number of seconds)
Last parameter is WSA watchdog. It releases connection link between wsa and app server.
 
thank you very much to all for your assistence!
Does anybody know a better way to create webservice with progress without this kind of problem?
 
I think it isnt possible. Let me explain.
Connection to web service <> TCP IP Connection. It is not socket to socket link.
You can disconnect your network adapter, then connect it again and program will work as nothing happens. Why?
Because of soap protocol.
First you read wsdl file and get procedures description and soap endpoints.
Next you send a soap query to WSA. Soap query consists procedure name and input parameters. Wsa reads soap packet and calls something like:

CREATE SERVER asbroker_async.
asbroker_async:CONNECT ("-pf appserv.pf") NO-ERROR. /* connect to appserver */
RUN procedure_name ON SERVER asbroker_async TRANSACTION DISTINCT ASYNCHRONOUS SET hProcedure
EVENT-PROCEDURE "OnEnd" IN hWSAPool. // Run procedure in state-free mode

RUN procedure_name PERSISTENT SET ReturnProcObject_KEY
ON SERVER asbroker_async TRANSACTION DISTINCT ASYNCHRONOUS SET hProcedure
EVENT-PROCEDURE "OnEnd" IN hWSAPool. // Run persistent procedure in state-free mode and create remote (server side) object. Return ProcObject_key to client.

When procedure is done callback function OnEnd gets OUTPUT PARAMETERS. Then WSA converts output parameters to Soap Packet and sends back to Client. If there is no connection to client nothing really happens. I think wsa just sets some flag in this case.

Between wsa and appserver we have TCP - IP connection. Thus DB server see there isnt any connection lost (to wsa) and watchdog isnt disconnect WSA from Appserver and DB.

I dont know what kind of task you are solving but I think it is possible create Persistent object on server side ("CreatePO_procedurename"). It returns PROC Object Key.If you save this key somewhere you can Ping process checking if persistent object still alive. If you lost connection and reconnect you can read saved prockey and then check again if proc object is still alive.

Sorry, my english skill isnt good.
 
Back
Top