Как использовать protobuf-net в сгенерированном сервисе Silverlight WCF - PullRequest
1 голос
/ 09 сентября 2010

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

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

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

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

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

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

1 Ответ

1 голос
/ 09 сентября 2010

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

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

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

...