gpt4 book ai didi

wcf - protobuf-net v2 和 Monotouch : How does it mix?

转载 作者:行者123 更新时间:2023-12-04 12:12:30 25 4
gpt4 key购买 nike

我一直在尝试将 protobuf-net 与 MonoTouch 一起使用,但我不知道如何使用,尽管听说这是可能的,但我无法找到任何教程或任何实际工作的示例。

Marc Gravell on his blog 证实了这一点它确实适用于 MonoTouch。我也浏览了他在这篇文章中所说的两个人的博客,但我没有找到任何与 protobuf 相关的东西。

在这个主题上没有任何线索,我决定下载 protobuf-net 并尝试一下。所以我创建了以下对象用于测试目的:

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

}

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

我尝试使用 [ServiceContract] 从 Windows 上运行的服务通过 WCF 发送它与接口(interface)
[OperationContract]
ProtoObject GetObject();

但在设备上收到的 ProtoObject 实例始终为空。这并不意外,因为我已经读过要使 protobuf-net 与 WCF 一起工作,您需要 modify the app.config/web.config .

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

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

最佳答案

它实际上与 blog entry by Friction Point Studios 中描述的几乎相同.由于设备上的元编程并不是一个真正的选项,因此诀窍是预先生成一个序列化 dll。这可以通过创建一个配置 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

关于wcf - protobuf-net v2 和 Monotouch : How does it mix?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7601703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com