EDIT [13/02/2012] v2:
Finalmente, dopo una settimana, sembra abbia risolto.
Mi sa che...era proprio come pensavo...
La DLL che serializza, probabilmente, scrive nel pacchetto inviato sulla rete la versione della DLL utilizzata (2.6.0.0); quando il pacchetto arriva all'applicazione Client, questa va in errore in quanto la DLL che lei utilizza è di una versione differente.
Leggendo Online, sembrava che la soluzione fosse quella di impostare sia per l'oggetto che serializza che per quello che deserializza la proprietà "AssemblyFormat" al valore "Simple" in modo che venga ignorata la versione degli assembly.
Nonostante questa impostazione (già comunque attiva di default), il problema rimaneva...
Continuando le ricerche, ho trovato sul sito Microsoft che il Framework 2.0 SP2 e il 3.5 SP1 sembra avessero un baco che generava questo tipo di errore (vedi kb960442) ma nonostante abbia installato le relative patch (KB981574) il problema rimaneva...
Ho trovato quindi su un sito c# un trucco per "imbrogliare" l'oggetto che effettua la deserializzazione in modo da sostiuire la versione dell'assembly all'interno del pacchetto ricevuto via rete con quello della DLL utilizzata prima di effettuare la deserializzazione.
In questo modo, sembra funzionare correttamente...spero possa essere utile a qualcuno
Codice per la deserializzazione [VB.NET]
codice:
Dim formatter As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim ms As New IO.MemoryStream(Buffer)
formatter.Binder = New mAPICommon.Functions.AllowAllAssemblyVersionDeserializationBinder
Oggetto = formatter.Deserialize(ms)
ms.Close()
Codice Nuova classe che esegue l'"imbroglio"
[VB.NET]
codice:
Public NotInheritable Class AllowAllAssemblyVersionDeserializationBinder
Inherits System.Runtime.Serialization.SerializationBinder
Public Overrides Function BindToType(ByVal assemblyName As String, ByVal TypeName As String) As System.Type
Dim typeToDeserialize As Type
Dim currentAssembly As String = System.Reflection.Assembly.GetExecutingAssembly().FullName
assemblyName = currentAssembly
typeToDeserialize = Type.GetType(String.Format("{0},{1}", typeName, assemblyName))
Return typeToDeserialize
End Function
End Class
Grazie e...alla prossima