Я очень путать с [Serializable] и : MarshalByRefObject атрибут в .NET Remoting .Однако я прочитал много статьи по этому вопросу. Если я использую атрибут [Serializable], то все методы выполняются полностью в домене вызывающих абонентов, это означает, что разные вызывающие лица должны иметь копию разных методов в своем собственном домене, и любое изменение, сделанное одним вызывающим, не должно отражать других. Но когда тот же вещь, которую я реализую в своей программе, я не получаю желаемого результата.разница между Serializable и MarshalByRefObject
ответ
Serializable
Атрибут используется для подписи объекта, который, когда он запрашивается посредством удаленного доступа, будет сериализован в массив байтов, передан как массив байтов от источника к месту назначения, а затем другой экземпляр объекта будет перестроен из этого массива байтов, который живет и дышит в среде назначения (AppDomain или Application). Манипуляции, выполняемые на этом объекте, не отражаются на источнике. Чтобы обновить объект, вам нужно сделать еще одну поездку к источнику и отправить измененный объект (как, конечно, новый массив байтов). это точно так же, как загрузка файла и его изменение, ваши изменения не отражаются на сервере, на котором вы загрузили файл.
var user = server.GetUser("edokan");
user.Alias = "edokan2";
var user2 = server.GetUser("edokan");
//user.Alias == user2.Alias; // is false
С другой стороны MarshalByRefObject
отмечает свой объект, а не данные вашего объекта, ссылка на ваш объект пройденное через Remoting и каждый вызов метода/каждая манипуляция свойство выполняется на стороне сервера. Это похоже на отправку вашего вопроса в StackOverflow и чтение ответов, у вас нет ничего, кроме браузера и URL-адреса для просмотра/управления вопросом. Все выполняется на серверах StackOverflow.
Ваше замешательство возникает из очень простой точки, MS сделала удаленный простой процесс, на самом деле думает, что все на стороне клиента.
Добавляя к ответу @edokan, атрибут Serializable в основном отмечает тип, предназначенный для сериализации (т. Е. Преобразованный в поток байтов).
рамочные (например, ORM картографами, ООБД, инерционности системы) могут использовать эту информацию, чтобы принимать такие решения, как всякий раз, когда состояние объектов должны быть сохранены в базе данных, передаваемых по сети, и т.д.
Вы можете использовать классы, такие как BinaryFormatter, чтобы взять объект, помеченный атрибутом Serializable, и создать из него поток байтов и сохранить его в файле и/или отправить его по сети, а затем восстановить его снова из этих потоков.
спасибо за ваш ответ :) – Saveen
Спасибо edokan. это сработало!! На самом деле я ошибся. Теперь я знаю, в чем разница между ними. – Saveen