使用ProtoBuf-net和gRPC

问题描述 投票:2回答:2

我正在尝试在使用gRPC的工作中构建PoC。谷歌文档here带我们通过示例应用程序。我想知道protobuf-net,特别是protogen,是否有能力理解执行gRPC调用所需的服务定义和类?或者这是在做什么?如果我使用google的protoc进行客户端和服务器代码生成(涉及服务定义和RPC调用)和protobuf-net用于我的业务对象,它会起作用吗?

protocol-buffers protobuf-net protogen
2个回答
4
投票

protobuf-net.Grpc现在是一件事......虽然在预览中。当.NET Core 3问世时,我们应该可以使用它。

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

namespace Whatever {
    [ServiceContract]
    public interface IMyAmazingService {
        ValueTask<SearchResponse> SearchAsync(SearchRequest request);
        // ... etc
    }
}

服务器只是实现接口:

public class MyServer : IMyAmazingService {
    // ...
}

(如何托管它们取决于您使用的是ASP.NET Core,还是使用本机/非托管gRPC库;两者都有效)

和客户只需要请求界面:

var client = http.CreateGrpcService<IMyAmazingService>();
var result = await client.SearchAsync(query);

在上述情况下,这将被推断为gRPC术语中的Whatever.MyAmazingService / Search服务,即

package Whatever;
// ...
service MyAmazingService {
    rpc Search (SearchRequest) returns (SearchResponse) {}
}

但是如果您愿意,可以更明确地配置服务/方法名称。以上是一个单一的例子;对于一元操作,结果可以是TTask<T>ValueTask<T> - 或void / Task / ValueTask中的任何一个(全部映射到.google.protobuf.Empty,没有合适的输入参数的方法)。

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


4
投票

这是我喜欢的东西,但到目前为止,没有:我没有必要调查这个,它没有成为我的积压的顶部。我试着密切关注人们想要什么功能,所以很高兴知道你在追求它,但今天:不。大多数情况下这是一个时间问题 - protobuf-net从我的空闲/空闲时间开始,除非我有真正的理由在其上花费“工作时间”。


更新:我正在积极与正在开发gRPC for .NET的微软人员交谈,看起来我们可能会尝试在这里一起工作,以便通过.NET Core 3.0中的gRPC实现这一点时间刻度 - 意思是:我们共享服务调用代码的实现,但允许它与多个序列化器API一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.