StrataFrame Forum

BrokenRule not serializable?

http://forum.strataframe.net/Topic12223.aspx

By PeterA - 10/26/2007

I've run into some trouble since I solved one problem with business object data disappearing before I wanted it to. I'd switched to using the ASP.NET state server for session handling and solved all the oddball problems I was having with business objects "timing out" and the data disappearing before I was ready for it to. Unfortunately, I now get an error anytime I have broken rules in my object. Here's the stack trace:



[SerializationException: Type 'MicroFour.StrataFrame.Business.BrokenRule' in Assembly 'MicroFour StrataFrame Business, Version=1.6.0.0, Culture=neutral, PublicKeyToken=99fe9917f71608a7' is not marked as serializable.]

System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type) +2317797

System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context) +245

System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() +88

System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) +305

System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) +50

System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +438

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) +131

System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer) +1513



[HttpException (0x80004005): 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.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer) +1602

System.Web.SessionState.SessionStateItemCollection.WriteValueToStreamWithAssert(Object value, BinaryWriter writer) +34

System.Web.SessionState.SessionStateItemCollection.Serialize(BinaryWriter writer) +627

System.Web.SessionState.SessionStateUtility.Serialize(SessionStateStoreData item, Stream stream) +257

System.Web.SessionState.SessionStateUtility.SerializeStoreData(SessionStateStoreData item, Int32 initialStreamSize, Byte[]& buf, Int32& length) +60

System.Web.SessionState.OutOfProcSessionStateStore.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem) +87

System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs) +355

System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +92

System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +64




Is there a reason the BrokenRule object wasn't made serializable? Is there any other way I might be able to get this working with ASP.NET State Server without having to completely re-write the application?



Any help would be appreciated.



Thanks!
By Trent L. Taylor - 10/26/2007

If you look at the source code, the BrokenRules collection did have the Serialize() attribute....but the BrokenRule item did not.  I added the Serialize() attribute to the BrokenRule class.  See if this resolves your problem.  You may have to restart IIS or restart the application pool once you have copied out the new assemblies before they take effect.
By PeterA - 10/27/2007

Trent L. Taylor (10/26/2007)
If you look at the source code, the BrokenRules collection did have the Serialize() attribute....but the BrokenRule item did not. I added the Serialize() attribute to the BrokenRule class. See if this resolves your problem. You may have to restart IIS or restart the application pool once you have copied out the new assemblies before they take effect.




That's what I noticed in the source when I reviewed it. I would have made the change myself and compiled the assemblies, but there's been enough fixes made that we don't have the most updated version of the source code (we have whatever is available for download when we bought the framework. Does the source code installer get updated when you guys make a fix for us (or anyone else, for that matter)?



Thanks for putting a rush on this. I downloaded and installed the new assemblies and it fixed the problem. Big load off my stress. Smile



Thanks!
By Trent L. Taylor - 10/27/2007

Glad it fixed your problem!  Well, these types of fixes are not an official release so we do not rebuild the source for each as this requires some effort and is part of the installation build cycle.  We will release 1.6.2 farily soon which has all of these changes and many more.  We send out a notification whenever we post a new build. 

Glad this took some stress of...now hopefully you can enjoy the remainder of your weekend! Smile