C# 如何跨WCF方法调用发送ProtoBuf?

C# 如何跨WCF方法调用发送ProtoBuf?,c#,wcf,protobuf-csharp-port,C#,Wcf,Protobuf Csharp Port,我已经使用protobuf csharp端口运行时编写和编译了一些.proto文件,我正试图返回一个文件作为对WCF方法调用的响应。这是我的服务: [ServiceContract] public interface IService { [OperationContract] IEnumerable<Protobuf.LogEntry> GetLogItems(); } 这很好用,所以一定和Protobuf有关 我的假设是,出于某种原因,WCF无法序列化Proto

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

[ServiceContract]
public interface IService
{
    [OperationContract]
    IEnumerable<Protobuf.LogEntry> GetLogItems();
}
这很好用,所以一定和Protobuf有关

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

那么:如何从WCF方法调用返回Protobuf对象呢?显然,我可以手动对Protobuf进行反序列化,但这会变得单调乏味,所以我希望WCF能帮我完成

注意,我并没有试图用Protobuf替换WCF序列化;我只想从WCF方法调用返回Protobuf对象


Edit#1:我已经手动设置了一个
DataContractSerializer
,并尝试序列化Protobuf。我得到一个错误,该错误表示无法序列化
类型'Protobuf.LogEntry'。考虑用DATACONTractAtvices属性标记它,并标记要用DATAMEMPANCE属性序列化的所有成员。< /代码>很明显,当代码自动生成时,我不能这样做。strong>那么:如何使用ProtoGen或其他方式添加适当的属性?

也许您可以编写自己的消息编码器:。不是答案,但是您可能应该使用protobuf net,因为它是一个标准的选择。@usr:protobuf net允许我从.proto文件生成protobuf,并使用必要的机制通过WCF发送吗?我想您在问题中说过,protobuf net会解决这个问题。
[OperationContract]
IEnumerable<string> GetLogItems();