当前位置 : 主页 > 大数据 > 区块链 >

wcf – protobuf-net v2和Monotouch:它是如何混合的?

来源:互联网 收集:自由互联 发布时间:2021-06-22
我一直在尝试使用带有MonoTouch的protobuf-net,但我不知道如何,尽管听说有可能,但我还是找不到任何教程或任何实际工作的例子. Marc Gravell on his blog确认它可以在MonoTouch上运行.我还浏览了他
我一直在尝试使用带有MonoTouch的protobuf-net,但我不知道如何,尽管听说有可能,但我还是找不到任何教程或任何实际工作的例子.

Marc Gravell on his blog确认它可以在MonoTouch上运行.我还浏览了他在本文中陈述的两个人的博客,但我没有找到与protobuf相关的任何内容.

在这个问题上没有领先,我决定下载protobuf-net并试试看.所以我创建了以下对象用于测试目的:

[ProtoContract]
public class ProtoObject
{
    public ProtoObject()
    {

    }

    [ProtoMember(1)]
    public byte[] Bytes { get; set; }
}

我尝试通过WCF从使用[ServiceContract]接口的Windows上运行的服务发送它

[OperationContract]
ProtoObject GetObject();

但是在设备上收到的ProtoObject实例始终为null.这并不是真正意料之外的,因为我已经阅读了使你需要modify the app.config/web.config使用WCF的protobuf-net工作.

由于MonoTouch项目没有app.config,但有点难以完成,但我还没有放弃.为了替换app.config,我尝试以编程方式将ProtoEndpointBehavior添加到客户端的端点的行为中,然后我碰到了一堵墙. iOS版本中没有ProtoBuf.ServiceModel.ProtoEndpointBehavior,可用于protobuf-net的.NET 3.0实现.

我将如何使用protobuf-net对使用protobuf-net序列化从基于Windows的WCF端点接收的对象进行反序列化.

它实际上与此 blog entry by Friction Point Studios中描述的几乎相同.由于设备上的元编程实际上不是一个选项,诀窍是预生成序列化dll.这可以通过创建一个小的控制台exe(这只是一个工具 – 它不是很漂亮)来配置RuntimeTypeModel(通过添加你感兴趣的类型),然后调用.Compile(… ):

var model = TypeModel.Create();
model.Add(typeof (ProtoObject), true);
model.Compile("MySerializer", "MySerializer.dll");

这会生成一个序列化器DLL;只需引用此dll(以及iOS版本的protobuf-net),并使用dll中的序列化程序类型与您的模型进行交互:

var ser = new MySerializer();
ser.Serialize(dest, obj); // etc
网友评论