Как объекты передаются по сети без аннулирования информации заголовка - PullRequest
0 голосов
/ 02 августа 2011

Имеет ли объект какие-либо данные заголовка, относящиеся к его текущему компьютеру и процессу, и если да, то как этот объект передается по сетевому соединению без аннулирования данных такого типа?Я знаю, что не могу напрямую скопировать двоичные данные объекта через сетевое соединение на другой компьютер / процесс, а другой процесс на другом компьютере просто интерпретирует (преобразует) двоичные данные как объект.

Существуют ли способы подсчитать, сколько данных, вырезанных из двоичного блока данных (проанализированных в объекте), оправдывает использование сериализованного объекта вместо простой передачи двоичных данных.

Ответы [ 3 ]

3 голосов
/ 02 августа 2011

Объект .net может передаваться через границы процесса только двумя способами: Сериализация и MarshalByRef.

Сериализация

Это просто берет значения (большинства) полей объекта и сохраняет их в экземпляре SerializationInfo . Затем ваш форматтер преобразует это в байты в потоке. У него нет «информации заголовка», как вы упомянули ... обычно оно имеет имя типа и полное имя сборки, в котором определен тип.

MarshalByRefObject

Это базовый класс .NET remoting , который означает, что вызовы методов из других доменов приложений могут перенаправляться через границы AppDomain к этому, что заставляет пользователей вашего объекта иметь ссылку на ваш объект. В этом случае сторонний AppDomain просто содержит прокси для вашего объекта. Этот прокси содержит соответствующую информацию.

2 голосов
/ 02 августа 2011

Общий объект C # присоединяется к его машине и процессу благодаря тому, что управляется платформой .net (так, под контролем сборщика мусора и т. Д.).

Но когда вы сериализуете и десериализуйте ваш объект, вы не будете ссылаться на такую ​​информацию.

Вам решать, как сериализовать и реконструировать объекты на другом конце.Это не зависит от языка.

0 голосов
/ 02 августа 2011

Обычно при передаче C # (или объекта .NET) все, что передается, это состояние (пользователя), а не внутреннее состояние .NET. Возможно, существует внутреннее состояние объекта, о котором мы, обычные программисты, не знаем, но это зависит от разработчиков среды выполнения .NET.

Таким образом, когда объект передается / сериализуется, этот вид информации (указатели и т. Д.) Игнорируется или преобразуется в независимые идентифицированные или исполняемые числа во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...