这是我的用例。
我在多语言系统上工作,通过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