将 ProtoBuf-net 与 gRPC 结合使用

2024-02-06

我正在尝试在工作中构建一个利用 gRPC 的 PoC。谷歌文档here https://grpc.io/docs/quickstart/csharp.html带领我们完成一个示例应用程序。我想知道 protobuf-net,特别是 protogen,是否有能力理解执行 gRPC 调用所需的服务定义和类?或者这是正在处理的事情吗?如果我使用 google 的 protoc 来生成客户端和服务器代码(涉及服务定义和 RPC 调用)并使用 protobuf-net 来生成我的业务对象,它会起作用吗?


protobuf-net.Grpc https://github.com/protobuf-net/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 库;两者都可以)

和客户只是request界面:

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

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 ProtoBuf-net 与 gRPC 结合使用 的相关文章

随机推荐