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 的时间)。这大致相似,但将以跨库的方式实施。
我正在考虑替换 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 的时间)。这大致相似,但将以跨库的方式实施。