这是我的用例。
我在一个多语言系统上工作,该系统通过 protobuf 和 zeromq 在几种不同的语言之间进行通信,其中一种是 C#。
我想在我们的数据库上实现 WCF JSON Web 服务,并且我想使用协议缓冲区来确保正确的 json 架构。WCF Web 服务现在工作正常,我可以轻松地创建标准[DataContract]
和[DataMember]
标记类,其架构与我的 protobuf 类相同,但我真的很想拥有这个自动化。
这大致是我得到的:
[ServiceContract]
public interface IMyService
{
[OperationContract]
IEnumerable<ProtoBufClass> MyData();
}
public partial class Service : IMyService
{
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "")]
public IEnumerable<ProtoBufClass> MyData()
{
return from nd someLinqQuery
// I want: select new ProtoBufClass.CreateBuilder()
// .SetA(nd.A).SetB(nd.B).SetC(nd.C).Build()
// This is what I have now
select new ProtoBufClass(nd.A, nd.B, nd.C)
}
}
目前ProtoBufClass
是使用上述[Data*]
属性手动编写的,因此当我尝试在系统的其他部分使用它时不能保证正确性。我想要的是 ProtoBufClass 成为我们所有语言中通用的实际生成的类,并且为我自动序列化为 JSON。
如果我能这样做,那就太酷了:
http://host/Service
=> protobuf message as json
http://host/Service <{Content-Type: protobuf}> | ?format=protobuf
=> serialized protobuf message
任何有关如何通过 zeromq 套接字公开此服务的指针也将不胜感激,我已经用 python 实现了 protobuf RPC,但我不知道如何在 C# 中做到这一点
谢谢本
编辑我忘了提到我使用的是 protobuf-csharp-port 而不是 protobuf-net