En estos días me encontraba dictando un workshop de Visual Studio 2005 Avanzado. En principio el material del que dispuse fueron las PPTs y Labs de ese workshop para Visual Studio 2003 por lo cual tuve que migrar practicamente todos los temas (Serialization, Memory Management, Threading, Remoting, Web Services, etc) y al momento de migrar lo referido a Serialization me encontré con que en Visual Studio 2005 la clase SoapFormatter se encuentra deprecada (es decir, se recomienda no utilizarla porque en la próxima versión no existirá más).
Antes de continuar con SoapFormatter, comento las nuevas características en .NET Remoting para .NET 2.0:
* Mejoras en los TcpChannel y HttpChannel
* Nuevo channel: IcpChannel (implementacion del protocolo IPC para transmitir mensajes)
* Soporte a Generics
* Version-Tolerant Serialization (VTS)
Con respecto a VTS se puede conocer qué es leyendo aquí.
.NET Remoting es un mecanismo de comunicación que se utiliza para comunicar objetos entre un mismo o distintos procesos, pudiendo estas estos en diferentes servidores. Para poder pasar un objeto por Remoting es necesario serializarlo y aquí es donde Microsoft le "cortó las piernas" a SoapFormatter ya que éste no implementa las mejoras de VTS ni permite serializar tipos Generics.
De todas maneras MS no ha hecho nada malo (aunque si alguien programó utilizando SoapFormatter en .NET 1.x quizás no piense como yo) porque BinaryFormatter sí implementa VTS, Generics y funciona 10 puntos. De hecho BinaryFormatter es más rápido y en la versión de .NET 2.0 permite incluso serializar DataSets que antes solo se podían serializar en formato XML.
En definitiva, si queremos serializar un gráfico de objetos de la forma más óptima tendremos que utilizar serialización binaria y si tenemos una necesidad de serializar a XML podremos utilizar el XmlSerializer (ya existía en .NET 1.x pero no estaba documentado).
A tener en cuenta... el futuro de .NET Remoting y Web Services es INDIGO (WCF o Windows Communication Foundation). Pero eso es tema para otro post.