3

这是我的用例。

我在一个多语言系统上工作,该系统通过 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

4

0 回答 0