如何跨WCF方法调用发送Protobufs?

时间:2015-07-24 09:56:17

标签: c# wcf protobuf-csharp-port

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

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

但这失败了,并且没有任何帮助&#34;服务器没有提供有意义的回复&#34;错误信息。

另一个问题的答案表明,这可能是序列化程序轰炸并且没有提供错误消息,因此我尝试将合同更改为string

[OperationContract]
IEnumerable<string> GetLogItems();

这很好用,所以它必须与Protobuf有关。

我的假设是WCF由于某种原因无法序列化Protobuf。我见过很多人写[DataContract],但这似乎只与protobuf-net有关,但我找不到有关protobuf-csharp-port的任何信息,但似乎没有使用[DataContract]以完全相同的方式。我尝试将Protogen的-code_contracts选项设置为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或其他方式添加适当的属性?

0 个答案:

没有答案
相关问题