3

我已经.proto使用 protobuf-csharp-port 运行时编写并编译了一些文件,并且我试图返回一个作为对 WCF 方法调用的响应。这是我的服务:

[ServiceContract]
public interface IService
{
    [OperationContract]
    IEnumerable<Protobuf.LogEntry> GetLogItems();
}

但这会失败,并显示无用的“服务器未提供有意义的回复”错误消息。

对另一个问题的回答表明,这可能是序列化程序爆炸而不提供错误消息,所以我尝试将合同更改为string

[OperationContract]
IEnumerable<string> GetLogItems();

这很好用,所以它一定与 Protobuf 有关。

我的假设是 WCF 由于某种原因无法序列化 Protobuf。我见过很多人在写[DataContract],但这似乎只与 相关protobuf-net,但我找不到任何关于 的信息protobuf-csharp-port,这似乎并没有以[DataContract]完全相同的方式使用。我尝试将-code_contractsProtogen 的选项设置为,true但这并不能解决任何问题(它甚至可能不相关)。

那么:如何从 WCF 方法调用中返回 Protobuf 对象?显然我可以手动反序列化 Protobufs,但这会变得乏味,所以我希望 WCF 为我做这件事。

请注意,我并不是想用 Protobuf替换WCF 序列化;我只想从 WCF 方法调用中返回一个 Protobuf 对象。

编辑#1:DataContractSerializer手动设置了一个并尝试序列化一个 Protobuf。我收到一个错误,上面写着Type 'Protobuf.LogEntry' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMember attribute.很明显,我不能这样做,因为代码是自动生成的。那么:如何使用 ProtoGen 或其他方式添加适当的属性?

4

0 回答 0