NetTalk Central
NetTalk Web Server => Web Server - Ask For Help => Topic started by: cwtart on July 31, 2013, 03:52:13 AM
-
NT 7.15
I have finally tracked my web server crashing to the session expiration setting. When a session expires after no activity it causes the exception shown here:
Call Stack:
7/31/2013, 6:34:19 AM, 0:04:12,,3,Runtime error,Index out of range
Error point: 0040196C
Process PID=6556 Image: C:\CT8\Applications\Server\Web Server\cpweb_mn\cpweb_mn.exe
Thread 1 Handle=000000E0 TID=5552
I have added the code shown below to the Web Server procedure to set my own session time out:
! Start of "Override Default Server Settings"
! [Priority 5000]
IF Global:SessionTimeOut = 0
Global:SessionTimeOut = 30
End
ThisWebServer._SitesQueue.Defaults.SessionExpiryAfterHS = Global:SessionTimeOut * 6000 + 1
! End of "Override Default Server Settings"
Put(s_web._SitesQueue)
Global:SessionTimeOut is a long and can be set by the user (in minutes) but as the code shows it cannot be zero.
Is there anything wrong with my code above?
Chuck
-
On further testing I have found that SessionExpiry causes a crash every time from the template code also. I removed my embeds and set the Session Timeout in the Web Server procedure properties to 5 minutes - after five minutes of inactivity (after login) the app crashes every time. And always with an exception of "index out of range".
Chuck
-
In NetWeb.clw I have traced the code to
DelSession Routine
RequestData.WebServer &= self
RequestData.DataString &= null
RequestData.RequestMethodType = NetWebServer_DELETESESSION
RequestData.SessionId = self._SessionQueue.SessionID
self.StartNewThread(RequestData)
The crash happens when StartNewThread is called. Crashes with "index out of range" exception.
Chuck
-
The problem was caused by my own code embeded in the WebServer procedure StartNewThread procedure
! [Priority 3000]
IF Sub(Upper(p_RequestData.DataString[1 : p_RequestData.DataStringLen]),1,18) <> 'POST/_CHECKSTATUS?' |
And Sub(Upper(p_RequestData.DataString[1 : p_RequestData.DataStringLen]),1,18) <> 'GET /_CHECKSTATUS?'
Global:WebLastActivity = p_RequestData.DataString[1 : p_RequestData.DataStringLen]
End
self._PerfStartThread()
I was trying to set a global variable that could be ready by my service manager app. Shot myself in the foot. Sorry for the false alarm.
Chuck
-
at least you figured it out Chuck - that's the main thing!
cheers
Bruce