ThinkGeo.com    |     Documentation    |     Premium Support

Problem Serializing MsSql2008FeatureLayer after Upgrade to Desktop 5.0

Hi,


As part of our project we try to save the layers that are open to disk so the map can be restored at a later time. After upgrading to MSD 5.0 we get an exception whenever we try to serialize a MsSqlServer2008FeatureLayer. Here is a code sample:



'***** Open a file stream to use for serialization
oFormatter = New BinaryFormatter()
oStream = New FileStream(sFileName, FileMode.Create, FileAccess.Write, FileShare.None)
oOverlay = CType(WinformsMap1.Overlays(0), LayerOverlay)
If oOverlay.Layers(0).IsOpen Then
   oOverlay.Layers(0).Close()
End If
oFormatter.Serialize(oStream, oOverlay.Layers(0))

 


Here is the exception:


System.Runtime.Serialization.SerializationException was unhandled

  Message=Type 'System.Data.SqlClient.SqlConnection' in Assembly 'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.

  Source=mscorlib

  StackTrace:

       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, SerializationBinder binder)

       at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)

       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.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph)

       at SerializeWMSLayer.Form1.SerializeWMSLayer() in C:\Users\steller\Documents\Visual Studio 2010\Projects\ThinkGeo\SerializeSQLServerLayer\Form1.vb:line 56

       at SerializeWMSLayer.Form1.btnSerialize_Click(Object sender, EventArgs e) in C:\Users\steller\Documents\Visual Studio 2010\Projects\ThinkGeo\SerializeSQLServerLayer\Form1.vb:line 113

       at System.Windows.Forms.Control.OnClick(EventArgs e)

       at System.Windows.Forms.Button.OnClick(EventArgs e)

       at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)

       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)

       at System.Windows.Forms.Control.WndProc(Message& m)

       at System.Windows.Forms.ButtonBase.WndProc(Message& m)

       at System.Windows.Forms.Button.WndProc(Message& m)

       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)

       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)

       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)

       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)

       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()

       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()

       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)

       at SerializeWMSLayer.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81

       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)

       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)

       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()

       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)

       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)

       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

       at System.Threading.ThreadHelper.ThreadStart()

  InnerException: 

 


Am I doing something wrong?


Thanks,


Steve


 


 


 



Steven, 
  
 Thanks for your posts! 
  
 This problem is obvious bug in the 5.0, I have posted it to our development team and if there are any updates I will let you know, 
  
 Thanks, 
  
 Scott,

Scott, 
  
 Thanks for the quick response! I’ll stand by for a fix in an upcoming daily build. 
  
 Steve

Steven, 
  
 Sorry for the inconvenience, just wait for a little times for this bug fix, I will let you know which DailyBuild version you should get, 
  
 Thanks, 
  
 Scott,

Steven, 
  
 This bug had been fixed. Please get the latest daily build (5.0.41.0 or later) to have another try.  
  
 Thanks, 
  
 Scott,

Scott, 
  
 Thanks! Working fine now. 
  
 Steve

Steven, 
  
 You are welcome, any more questions please let me know again, 
  
 Thanks, 
  
 Scott,