Différence entre Serializable et MarshalByRefObject

Je suis très confus avec [Serializable] et : Atsortingbut MarshalByRefObject dans .NET Remoting .Cependant, j’ai lu de nombreux articles à ce sujet. Si j’utilise l’atsortingbut [Serializable], alors toutes les méthodes sont exécutées entièrement dans le domaine des appelants, cela signifie que différents appelants doivent disposer d’une copie des différentes méthodes sur leur propre domaine et que toute modification effectuée par un appelant ne doit pas être répercutée sur les autres.Mais chose que je mets en œuvre dans mon programme, je ne reçois pas le résultat souhaité.

Serializable atsortingbut Serializable est utilisé pour signer un object qui, lorsqu’il est demandé par le biais de l’access distant, sera sérialisé dans un tableau d’octets, transféré comme tableau d’octets de la source à la destination, puis une autre instance d’object est reconstruite à partir de ce tableau d’octets qui vit et respire environnement de destination (AppDomain ou Application). Les manipulations effectuées sur cet object ne sont pas répercutées sur la source. Pour mettre à jour un object, vous devez effectuer un autre voyage vers la source et envoyer votre object modifié (en tant que nouveau tableau d’octets, bien sûr). c’est comme si vous téléchargiez et modifiez un fichier, vos modifications ne sont pas répercutées sur le serveur sur lequel vous avez téléchargé le fichier.

 var user = server.GetUser("edokan"); user.Alias = "edokan2"; var user2 = server.GetUser("edokan"); //user.Alias == user2.Alias; // is false 

D’autre part, MarshalByRefObject marque votre object de telle sorte qu’à la place des données de votre object, une référence à votre object est acheminée via la communication à distance et chaque manipulation de méthode / chaque propriété est effectuée côté serveur. C’est comme si vous posiez votre question sur StackOverflow et lisiez les réponses, vous n’avez qu’un navigateur et une URL pour voir / manipuler la question. Tout est effectué sur les serveurs StackOverflow.

Votre confusion découle d’un point très simple: MS a rendu la communication à distance tellement simple, on pense en fait que tout est du côté du client.

En ajoutant à la réponse @edokan, l’atsortingbut Serializable marque essentiellement un type comme étant destiné à être sérialisé (c’est-à-dire converti en un stream d’octets).

Les frameworks (tels que les mappeurs ORM, les oodbs, les moteurs de persistance) peuvent utiliser ces informations pour prendre des décisions, notamment lorsque l’état des objects doit être conservé dans les bases de données, envoyé sur un réseau, etc.

Vous pouvez utiliser des classes telles que BinaryFormatter pour prendre un object marqué avec l’atsortingbut Serializable, en créer un stream d’octets et le stocker dans un fichier et / ou l’envoyer sur le réseau, et reconstruire votre object à partir de ces stream.