1. 首先是创建一个gRPC service,用来提供服务,给到客户端调用
新建即可,值得注意的是
1. 示例项目中引用了 Grpc.AspNetCore ,用来在api 中注入builder.Services.AddGrpc(); 并且使用中间件 app.MapGrpcService<GreeterService>();
2. 在csproj 文件中添加了如下iterm
<ItemGroup>
<Protobuf Include="Protos\greet.proto" GrpcServices="Both" />
</ItemGroup>
其他的客户端也需要该配置,或者在任意的现存项目中要使用protobuf 来生成cs 文件都需要如此配置告诉编译器,此外确保不出错,还请检查 proto 文件的属性,是否如下图
2. 如果你要创建一个客户端的话,任意的程序框架都可以,在此使用了console 控制台和webapi 客户端两种,
Install-Package Grpc.Net.Client // 客户端库
Install-Package Google.Protobuf //协议库
Install-Package Grpc.Tools //生成cs 的工具库
都需要上述三个包的引用,此外在webapi 中为了使用DI 和管道,所以还需要额外引入
Grpc.AspNetCore // 使用clientFactory的扩展库
console程序中可以使用如下流程创建客户端
using var channel = GrpcChannel.ForAddress("https://localhost:7001");
var client = new Order.OrderClient(channel);
var q = client.QueryOrder(new QueryRequest());
webapi中可以使用依赖注入
builder.Services.AddGrpcClient<Order.OrderClient>(s =>
{
s.Address = new Uri("https://localhost:7001");
});
并在使用的service 中构造函数注入 Order.OrderClient即可
3. 如果需要在web 客户端中使用的话,还需要额外引入Grpc.AspNetCore.Web,实际上grpc 不支持浏览器直接访问,该包提供一个代理服务Envoy 作为中转。
详情参考: