Protocol buffers ProtoBuf网络在gRPC中的应用

Protocol buffers ProtoBuf网络在gRPC中的应用,protocol-buffers,protobuf-net,protogen,Protocol Buffers,Protobuf Net,Protogen,我正试图在工作中建立一个利用gRPC的PoC。google文档带我们浏览了一个示例应用程序。我想知道protobuf net,特别是protogen,是否有能力理解执行gRPC调用所需的服务定义和类?还是这件事正在进行中?如果我使用google的protoc生成客户端和服务器代码(包括服务定义和RPC调用),使用protobuf net生成我的业务对象,它会起作用吗?这是我很想做的事情,但到目前为止,还没有:我还没有必要研究这个问题,而且它还没有达到我积压工作的顶部。我试着关注人们想要什么功能,

我正试图在工作中建立一个利用gRPC的PoC。google文档带我们浏览了一个示例应用程序。我想知道protobuf net,特别是protogen,是否有能力理解执行gRPC调用所需的服务定义和类?还是这件事正在进行中?如果我使用google的protoc生成客户端和服务器代码(包括服务定义和RPC调用),使用protobuf net生成我的业务对象,它会起作用吗?

这是我很想做的事情,但到目前为止,还没有:我还没有必要研究这个问题,而且它还没有达到我积压工作的顶部。我试着关注人们想要什么功能,所以很高兴知道你在追求它,但今天:不。这主要是时间问题——protobuf net在我的空闲/业余时间得到发展,除非我有真正的理由花“工作时间”在它上


更新:我正在积极与正在为.NET开发gRPC的Microsoft人员交谈,看来我们很可能会在这里一起努力,以便在.NET Core 3.0的时间尺度内实现gRPC的功能-意思是:我们将共享服务调用代码的实现,但是允许它与多个序列化程序API一起工作。

现在是一件事。。。尽管在预览中。当.NETCore3问世时,我们应该能够提供这一功能

它受WCF方法的启发,因此您的服务接口是通过以下方式定义的:

名称空间{
[服务合同]
公共接口IMyAmazingService{
ValueTask SearchAsync(SearchRequest请求);
//…等等
}
}
服务器只是实现接口:

公共类MyServer:IMyAmazingService{
// ...
}
(托管它们的方式取决于您使用的是ASP.NET Core还是本机/非托管gRPC库;两者都可以使用)

客户端只需请求接口:

var client=http.CreateGrpcService();
var result=await client.SearchAsync(查询);
在上述情况下,这将被推断为gRPC术语中的
Whatever.MyAmazingService
/
Search
服务,即

打包任何东西;
// ...
服务MyAmazingService{
rpc搜索(SearchRequest)返回(SearchResponse){}
}
但是,如果愿意,可以更明确地配置服务/方法名称。以上是一个一元例子;对于一元操作,结果可以是
T
Task
ValueTask
-或
void
/
Task
/
ValueTask
(所有这些结果都映射到
.google.protobuf.Empty
,没有合适输入参数的方法也是如此)


如果对输入参数(客户端流)、返回类型(服务器流)或两者(双工)使用
IAsyncEnumerable
(对于某些
T
),则流/双工操作将自动推断出来。

感谢您的快速响应。通过使用谷歌提供的工具来编写服务定义等,并坚持使用protobuf net来定义我的模型/业务对象,您是否预见到将protobuf net与gRPC结合使用会出现问题?最终,它们都将成为.NET类,只是对于应用程序的不同部分,实现这些类的方法会有所不同。@Sai google API基于google对protobuf对象的方法;我不希望protobuf网络类型和gRPC API的google实现一起工作。请参阅更新,注意您是一个star Marc。gRPC无疑是前进的方向。很高兴这得到了人们的喜爱和关注。它也会在.NETFramework上得到支持吗?(可能针对.net标准2.x)@barakcaf降到.net 4.6.1