ThinkGeo.com    |     Documentation    |     Premium Support

Using with the Session disabled

I'm trying to use Thinkgeo WebEdition without using the session itself. I've tried disabling it within web.config and view page directives by using  enableSessionState="false"


When loading the page I'm getting an exception when the viewstate is saved. From my understanding if session is disabled it should be using the HiddenFieldPageStatePersister and not the session based one. 


From the stack trace it seems that ThinkGeo is somehow implicitly called the session based save. Please advise on how to proceed without using the SessionState at all. We're trying to avoid the concurrency hit associated with using session's as referenced at  msdn.microsoft.com/en-us/library/ms178581%28VS.100%29.aspx


Exception: System.Web.HttpException



Message:  Session state can only be used when enableSessionState is set to true,  either in a configuration file or in the Page directive. Please also  make sure that System.Web.SessionStateModule or a custom session state  module is included in the \\ section in the application configuration.



Stack Trace:

at System.Web.UI.Page.get_Session()

at ThinkGeo.MapSuite.WebEdition.Map.SaveViewState()

at System.Web.UI.Control.SaveViewStateRecursive(ViewStateMode inheritedMode)

at System.Web.UI.Control.SaveViewStateRecursive(ViewStateMode inheritedMode)

at System.Web.UI.Control.SaveViewStateRecursive(ViewStateMode inheritedMode)

at System.Web.UI.Control.SaveViewStateRecursive(ViewStateMode inheritedMode)

at System.Web.UI.Control.SaveViewStateRecursive(ViewStateMode inheritedMode)

at System.Web.UI.Page.SaveAllState()

at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)



Hello Muhammed, 
  
 Thanks for your post, sorry our map control must use session to save and load necessary information to render the map. If you disable the session, it won’t work. 
  
 There is a way to handle this situation, but it’s not very easy, you need override some methods in Map class and Handler class, remove all the code which need session and pass the information by your own logic. 
  
 Let us know if you want to do this and we can list all the function you need override here. 
  
 Sorry for the inconvenience, 
  
 Regards, 
  
 Gary

Yes I'd like to do that, please let me know which methods to override and the information that needs to be passed to them



Hello Muhammed, 
  
 I have double checked this, and I noticed it will cost a lot of time to override all necessary code. So maybe we can discuss and get more details to decide if it need to do. 
  
 1. If you abandoned session, what’s the way you want to set and get the data? As far as I know, without session, there are only two ways to do this, save all data to sql, and read from it. Or serialize the session to file and deserialize it from file. What’s your idea? 
  
 2. We have another way that working with WMS server, so everything working on WMS but web only get the result, maybe it will have potential problem, but it need more information from you to determine. 
  
 3. And can you describe your requirements more details? Maybe we can find out some workaround. 
  
 Let us know your queries. 
  
 Regards, 
  
 Gary

From the code I’ve viewed. There’s an extensible class on how the page persists a control (ViewState).  
 developercontainer.blogspot.com/2009/08/custom-persister-to-store-state-in.html 
 1) We’re working on managing the session by an in-house solution. Similar to the session we will be storing objects in-memory but will be lowering the concurrency limits to allow concurrent access to most objects that aren’t volatile. Since it’s a custom solution and we know which objects will need to be protected we don’t need to have an all or nothing approach to it 
 2) We’re already using both WMS and WebEdition. The layers in question that are being generated via WebEdition are not cacheable and dynamic and for the way our architecture is setup would involve a significant performance hit 
 3) Like Eric in the AJAX thread, we’re making extensive use of Javascript and calling various server functions and due to the presence of ThinkGeo/WebEdition have been forced to use the session affecting performance.  
  
 From my understanding of controls and viewstate a control should be raising the saveviewstate event and it should be saved based upon the viewstate persister in use (HiddenFieldPageStatePersister and SessionPageStatePersister being the ones shipped from Microsoft. We would be using our own PageStatePersistor

Hello Muhammed, 
  
 Thanks for the further information, I think I understand your scenario, but for now, it’s hard to public a event to archive it. We are considering it and maybe change in next release. 
  
 I will working on this and write a sample to guide you inherit a class and override necessary method. 
  
 I will let you know when it’s ready. 
  
 Regards, 
  
 Gary 


Gary 
 Just wanted to check in on whether there were any further updates?

Hello Muhammed, 
  
 Sorry for waiting, we got some ideas when we write the sample, so we have changed the plan that we will remove using session in the MapSuite WebEdition totally, instead of saving necessary information in the memory pool of web server. 
  
 So I didn’t working on the sample anymore and I hope we can finish this function before the next release. 
  
 Regards, 
  
 Gary

1. Any update on disabling session on the map?  
  
 2. I load up many ShapefileFeatureLayers in my LayerOverlay, and the memory footprint per session is huge (250KB). Is there any way to point to static rendering logic in code, rather than objects in session?

Hi Rob, 
  
 About item 1, I have asked our developer, they haven’t decided to start the change of disable session. 
  
 About item 2, sorry I haven’t find a way to use static rendering logic, but have you tried to save your session out of process instead of saved in IIS process? 
  
 Regards, 
  
 Don