After a period of inactivity, the system displays an error when I click a button. The correct action would be to go back to the login screen. How to contour this problem?
The log show this message:
Processing Error - http://localhost/easyTest/DOMEvent.easy?&Event=click&ObjAddr=cad_ina_scx-button_padrao5&UserID=5GE10LST7&PageInit=&nReq=3
Error: 1924 Message: TOFORM is not an object. Code: Program: propsrestore Line No: 12255 Client: ::1 Post Buffer: &nKeyCode=&nButton=1&nShiftAltCtrl=0&nXcoord=809&nYcoord=13&nRow=115&nCol=960&lastKey=0&version=2.28.1-beta.6&sync=false&vpw=1408&vph=647&userID=5GE10LST7&reqID=1839_5H10SLVMO-001&nInet=0.000&nCli=0.009
Exception Handled by: Easyprocess.Error()
Hi Arcadio
Client timeOut
This happens when the server fails to respond within the timeOut defined by .requestTimeoutDev
and .requestTimeoutProd
in xxx.js
. This is never due to a server-side error: when a server-side error occurs, the .error()
method triggers, request processing stops and server sends back the error to the user.
This timeOut message occurs when server processing takes longer than what is defined in xxx.js
; classic causes for that are:
- very long processing like daily statistics, large reports, etc.
- server waiting for some resource (eg. network) with a too long timeOut
- in development, acting in the browser (eg. focusing on a control) while the application is not running
- on shared production server, no CPU time available for your server (in this case,
wc.dll
reloads the COM server and adds an entry to 'dll error log' (/wc.wc?wwMaint~wcDLLErrorLog) such as:
2018-10-10 10:44:47:496 Web Connection Request timed out. - /tutotest/bs/MethExec.tuto?&MethAddr=InitControlsInet&ObjAddr=event_scx&UserID=&PageInit=true&nReq=1 - 0
2018-10-10 10:45:12:105 RPC Server Unavailable (Invoke): Attempting to Reload Server... - /tutotest/bs/DOMEvent.tuto?&Event=focus&ObjAddr=event_scx-pgf-pag1-txt&UserID=&PageInit=&nReq=3&Value=%27%27&ValueType=string - 0
2018-10-10 10:45:12:105 COM Server Timed out - Next line releases - 1413
The correct action would be to go back to the login screen
By implementing .customErrorMsgHeader()
and .customErrorMsgBody()
in xxx.js
, you can alter the message presented to the user. However you can't define a callback when user presses the OK
button on the 'message box'. This would require an evolution.
Error "TOFORM is not an object"
This error occurs because the requested form is no longer instantiated; most likely reason is a missing dodefault()
in form.release()
code.
I was testing with an old source code to test the handles. I was really missing DODEFAULT () in that source code. Do you think this timeout problem is something I have to worry about in the production application? If a refresh is done in the browser theoretically everything would work again, am I correct?
Hi Arcadio,
Do you think this timeout problem is something I have to worry about in the production application?
no unless you fall in the cases I mentioned earlier
However we could translate the various messages into your users' language (Portuguese) if you wish.
If a refresh is done in the browser theoretically everything would work again, am I correct?
no
navigating to home page does not change the server's state, it just executes another request. Quite different from a desktop behavior.
2019-05-2 00:07:56:152 COM Server Timed out - Next line releases - 1413
2019-05-2 00:07:57:160 Forced Release of Server - 183
2019-05-2 00:07:57:160 COM Server Timed out - Next line releases - 183
2019-05-2 00:07:58:167 Forced Release of Server - 183
2019-05-2 00:08:00:168 Web Connection Request timed out. - /easyTest/gridMethod.easy?&MethAddr=wAfterRowChange&ObjAddr=cad_ina_scx-grid_padrao1&UserID=5GN14SW17&PageInit=&nReq=21&ValueType=number&Value=4 - 0
2019-05-2 00:08:02:168 Web Connection Request timed out. - /easyTest/gridMethod.easy?&MethAddr=wAfterRowChange&ObjAddr=cad_ina_scx-grid_padrao1&UserID=5GE10LST7&PageInit=&nReq=24&ValueType=number&Value=3 - 0
2019-05-2 00:09:22:330 RPC Server Unavailable (Invoke): Attempting to Reload Server... - /easyTest/index.easy? - 0
2019-05-2 00:10:55:050 Web Connection Request timed out. - /easyTest/DOMEvent.easy?&Event=click&ObjAddr=cad_ina_scx-button_padrao4&UserID=5GN14SW17&PageInit=&nReq=22 - 0
2019-05-2 00:10:57:051 Web Connection Request timed out. - /easyTest/DOMEvent.easy?&Event=click&ObjAddr=cad_ina_scx-button_padrao4&UserID=5GE10LST7&PageInit=&nReq=25 - 0
The errors that appear in the WC log are those.
This problem only occurs if I leave a modal window open in the browser. If it is on the main screen of the timeout message and return to the main screen without any error.
The errors that appear in the WC log are those
All the errors you report occur on cad_ina.scx
.
Could you post the response times for this form from the FoxInCloud Web App Dashboard? /easyTest/foxincloud-status.easy?tab=Forms#cad_ina_scx
Maybe we can identify some bottleneck in the Form or in FoxInCloud code.
Note: Web Connection Request timed out
means that the server has taken more time than the timeout defined in <site>/bin/wc.ini
This problem only occurs if I leave a modal window open in the browser
I see no relation between the modality of the form and the error you relate. The FoxInCloud Server treats all forms equally, the only difference is how it renders in the browser.
Bottom line is that all user requests are stateless: restore state, execute request, save state, respond UI updates back; all the same regardless of the form modality.
I was able to solve the problem in the following way. When the exe is released on the server and it is reopened, some objects were not being recreated, I able to handle it now. Now the biggest problem is that the cursors fill by the Cursor Adapter in the form load are being closed when the exe is released on the server and are not being recreated. I got it to be done a fill in init of form if the cursor is closed i do fill, I do not know if it is the best solution but it is working perfectly.
Bellow my init form code
IF !USED("CRMOTINA")
.de_padrao.camotina.Cursorfill()
ENDIF
IF !USED("CRPARAM")
.de_padrao.caparam.Cursorfill()
ENDIF
.de_padrao.caparam.Cursorrefresh()
.de_padrao.camotina.CursorRefresh()