Как использовать protobuf-net в сгенерированном сервисе Silverlight WCF

Я пытаюсь использовать protobuf-net в приложении WCF/Silverlight для повышения производительности сериализации массива больших объектов. Я могу сериализовать / десериализовать классы (добавлен Order= и т. Д.) В коде сервиса.

Но когда я пытаюсь применить ProtoBehavior и вызываю метод службы с поддержкой protobuf из Silverlight, я получаю пустые значения вместо данных (или ошибок).

Я думаю это потому что:

  1. ProtoBehavior теряется в сгенерированном Silverlight сервисном коде;
  2. Классы (типы) домена не входят в повторно используемую сборку, они восстанавливаются на клиенте, и Order= теряется.

Однако в настоящее время я не могу изменить обе точки. Есть ли способ использовать protobuf-net без рефакторинга (довольно большого) проекта для совместного использования сборки ASP.NET/Silverlight с классами домена и т. Д.?

Я даже думаю, что будет проще настроить Reference.cs, чтобы добавить недостающее поведение и Order= соответствующим участникам (через скрипт perl/regex), если нет другого решения, но что именно мне нужно настроить, и будет ли оно работать?

1 ответ

Ре [ProtoBehavior]В Silverlight просто отсутствуют точки расширения, которые мы можем использовать, чтобы молча внедрить альтернативный сериализатор в WCF, что является проблемой. Единственные способы сделать это в настоящее время с помощью Silverlight - это бросить byte[] или Stream по проводу и обработайте сериализацию / десериализацию на двух концах.

ре Order=...стоило бы проверить содержимое; если они приходят с разными номерами, есть способы исправить это с помощью partial class - мерзкий взлом, но IIRC есть ProtoPartialMember (или аналогичный), который может быть применен к классу, но который говорит об отдельном члене (свойство / поле). Вы можете исправить номер таким образом. Также есть Offset (IIRC, извините - нет кода для передачи) на [ProtoContract] что также может помочь, если у вас есть большое количество полей.

В v2 (не выпущено) вы можете гораздо лучше контролировать порядок (/ номера полей) без необходимости связываться с атрибутами.

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