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

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

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

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

3 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам