Using Out of Process Session State with iMIS

I would like to store my session state out of process from IIS, so my session state does not disappear everytime the ASP.NET Worker Process recycles.

However, it seems you are storing non-serializable objects in session state making it impossible to do so.  It also seems like a bad idea to use session state to st

See:
http://msdn.microsoft.com/en-us/library/87069683(VS.71).aspx

<system.web>
<sessionState mode="StateServer" stateConnectionString="tcpip=dataserver:42424" cookieless="false" timeout="20"/> </sessionState>
</system.web>

When I do this I get this error:

Unexpected website error: Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode.

System.Web.HttpException: Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode. ---> System.Runtime.Serialization.SerializationException: Type 'Asi.iBO.ContentManagement.CWebUser' in Assembly 'Asi.iBO, Version=15.0.3.2401, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
at System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer)
--- End of inner exception stack trace ---
at System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer)
at System.Web.SessionState.SessionStateItemCollection.WriteValueToStreamWithAssert(Object value, BinaryWriter writer)
at System.Web.SessionState.SessionStateItemCollection.Serialize(BinaryWriter writer)
at System.Web.SessionState.SessionStateUtility.Serialize(SessionStateStoreData item, Stream stream)
at System.Web.SessionState.SessionStateUtility.SerializeStoreData(SessionStateStoreData item, Int32 initialStreamSize, Byte[]& buf, Int32& length)
at System.Web.SessionState.OutOfProcSessionStateStore.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem)
at System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs)
at System.Web.SessionState.SessionStateModule.OnEndRequest(Object source, EventArgs eventArgs)
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

You're correct - iBO.NET is

You're correct - iBO.NET is not serializable, so if you're storing any iBO objects in your session, you have to use InProc session state. This is unfortunate, as it severely limits the scalability of apps based on iBO.NET.

It also sounds like, at the moment at least, there are no plans to make iBO.NET serializable: http://www.imiscommunity.com/why_ibo_for_net_is_not_strongly_named

 

Chris Wilson
Web Applications Developer
Executive Director, Inc.

My point was slightly different.

Personally, I find it kind of abhorrent to store complex* objects in session state.  Sure, a light weight list of properties no problem.  But iBO is freaken huge, and that is a lot of unneeded overhead esp. to store per user. 

Not that I am against making objects serializable, but I would rather see PV use lighter weight options to maintain state.

Jason

While CWebUser may not be

While CWebUser may not be serializable, CStaffUser and CContactUser are. I have no issues using these objects with StateServer and iBO.NET. Not sure if this is helpful to you or not.