これが私のユースケースです。
私は、protobuf と zeromq を介していくつかの異なる言語間で通信する多言語システムに取り組んでおり、その 1 つが C# です。
データベースに WCF JSON Web サービスを実装したいと考えており、プロトコル バッファを使用して正しい json スキーマを確保したいと考えています。現在、WCF Web サービスは正常に動作しており、protobuf クラスと同じスキーマを使用して標準[DataContract]
の[DataMember]
マークアップ クラスを簡単に作成できますが、これを自動化したいと考えています。
ここに私が持っているものがあります:
[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-netではなくprotobuf-csharp-portを使用していることを忘れていました