Как использовать пользовательскую сериализацию во время удаленного взаимодействия .NET? - PullRequest
5 голосов
/ 17 апреля 2009

Я написал специальную процедуру сериализации, в которой не используются ISerializable или SerialzableAttribute для сохранения моих объектов в файл.

Я также удалю эти же объекты и хотел бы использовать ту же технику сериализации. Однако я не хочу реализовывать ISerializable, потому что мой метод сериализации полностью отделен от моих объектов (и я бы хотел, чтобы он оставался таким).

Есть ли простой способ (возможно, с удаленными приемниками), где я могу взять поток и записать в него байты, а с другой стороны прочитать байты из него, пропустив инфраструктуру сериализации в .NET?

Ответы [ 3 ]

3 голосов
/ 18 апреля 2009

Если вы хотите использовать remoting , тогда вы ограничены BinaryFormatter. Обычно вы можете использовать «заменитель сериализации», чтобы предоставить сериализатор, отдельный от форматера, но AFAIK это не работает с удаленным взаимодействием .NET.

Тем не менее, если вы напишите свой собственный стек RPC (например, через TCP / IP или HTTP), у вас будет намного больше контроля. Точно так же с WCF вы можете заменить сериализатор через поведение. Я использую оба этих трюка в protobuf-net (здесь находятся хуки WCF ).

Не уверен, что вы можете сделать это с remoting , хотя - вам, вероятно, придется использовать ISerializable.

1 голос
/ 23 мая 2014

Вы можете реализовать IClientFormatterSinkProvider & IServerFormatterSinkProvider и настроить средство форматирования канала (например, через конфигурацию ).

См. BinaryServerFormatterSinkProvider / BinaryServerFormatterSink и BinaryClientFormatterSinkProvider / BinaryClientFormatterSink для получения подробной информации о реализации.

1 голос
/ 17 апреля 2009

Если вы хотите явно иметь дело с потоковыми байтами между вашими процессами, используйте каналы. Вот один из примеров именованных каналов , у Google их тоже много.

...