ProtoBuf-Azure 服务结构

ProtoBuf - Azure Service Fabric

我正在考虑替换 ASF 中 RPC 的默认序列化程序。这涉及实现一些接口,其中一个在通过 RPC

通信的服务之间传递
 public interface IServiceRemotingResponseMessageBody
  {
    void Set(object response);

    object Get(Type paramType);
  }

由于实现需要可序列化,明显的 ProtoBuf 实现类似于

    [ProtoContract]
    public class ProtoBufRemotingResponseBody : IServiceRemotingResponseMessageBody
    {
        [ProtoMember(1)]
        public object Value { get; set; }

        public void Set(object response)
        {
            Value = response;
        }

        public object Get(Type paramType)
        {
            return Value;
        }
    }

不幸的是,

失败了

No serializer defined for type: System.Object

这里有解决方法吗? System.Object 没有合同,但 OOTB DataContract 序列化程序可以,MessagePack here, but these are not schematized which creates versioning headaches when using reliable collections 也可以。我试过使用通用基类型,但值可以是 IEnumerable<T>T

有人能帮忙吗? 谢谢, KH

目前,protobuf-net 对 object 没有很好的支持,除非通过一些乱七八糟的黑客攻击。最简单的尝试(只是为了看看它是否适用于您的场景)是在该 proto-member 属性上找到 "dynamic types" 标志并将其设置为 true。这个特定于库的 hack 将一些类型的元数据刻录到数据中,以允许它处理未知类型,但它远非完美。

此处的 "better" 修复将涉及我寻找时间来实现 "any" 功能(最近添加到 Google 库,大约在 proto3 IIRC 的时间)。这大致相似,但将以跨库的方式实施。