我使用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或其他方式添加适当的属性?