如何在Silverlight WCF生成的服务中使用protobuf-net

时间:2010-09-09 08:22:21

标签: silverlight wcf protobuf-net

我尝试在WCF / Silverlight应用程序中使用protobuf-net来改进大对象数组序列化性能。我可以在服务代码中序列化/反序列化类(添加Order =等)。

但是当我尝试应用ProtoBehavior并从Silverlight调用启用protobuf的服务方法时,我得到的是空值而不是数据(或错误)。

我认为这是因为:

  1. ProtoBehavior在Silverlight生成的服务代码中丢失;
  2. 域类(类型)不在重用程序集中,它们在客户端上重新生成,而Order =丢失。
  3. 然而,目前我无法改变这两点。有没有办法使用protobuf-net而不重构(相当大的)项目以与域类共享ASP.NET / Silverlight程序集等?

    我甚至认为,如果没有其他解决方案,调整Reference.cs以添加缺失行为和Order =更适合成员(通过perl / regex脚本)会更容易,但我究竟需要调整什么,并且它有用吗?

1 个答案:

答案 0 :(得分:1)

Re [ProtoBehavior],Silverlight非常缺乏我们可以用来静默将一个替代序列化器注入WCF的扩展点,这很痛苦。使用silverlight执行此当前的唯一方法是通过线路抛出byte[]Stream,并在两端处理序列化/反序列化。

Re Order=...,值得查看内容;如果他们提出不同的数字,有办法通过partial class - 一个丑陋的黑客来解决这个问题,但IIRC有ProtoPartialMember(或类似的)可以应用于,但讨论的是个人会员(财产/领域)。您可以通过这种方式更正数字。在Offset上还有一个[ProtoContract](IIRC,抱歉 - 没有代码可以提供),如果您有大量字段,也可以提供帮助。

在v2(未发布)中,您可以更好地控制排序(/字段编号),而不必弄乱属性。