AspNetCore集成gRPC以及简单使用
·
文章目录
概要
本文通过一个简单案例介绍如何在AspNetCore中集成gRPC并使用它。需要注意的是我的版本是.NET8,不同的版本可能会存在差异。
整体流程
- 创建两个WebAPI的项目,作为gRPC的服务端和客户端
- 服务端编写一个服务并注册
- 客户端集成gRPC服务,然后在控制器中调用
具体步骤
第一步、创建客户端和服务端的项目GRPCStudy.AspNet.Server和GRPCStudy.AspNet.Client

第二步、编写服务端
1、安装依赖的nuget包Grpc.AspNetCore 2.70.0
2、创建服务基类的描述文件mydate.proto(gRPC工具会根据这个文件生成一个基类),我们会新建一个类继承它并重写里面的方法(即服务的具体实现)
文件内容如下
syntax = "proto3";
option csharp_namespace = "GRPCStudy.AspNet.Server";
package mydate;
// The greeting service definition.
service MyDate {
// Sends a greeting
rpc GetCurrentDatetime (GetCurrentDatetimeRequest) returns (GetCurrentDatetimeReply);
}
// The request message containing the user's name.
message GetCurrentDatetimeRequest {
}
// The response message containing the greetings.
message GetCurrentDatetimeReply {
string datetime=1;
}
参考C#类,其中包含命名空间
GRPCStudy.AspNet.Server、类名MyDate、方法名GetCurrentDatetime、参数GetCurrentDatetimeRequest以及返回值GetCurrentDatetimeReply。后面则是对于参数和返回值类型的定义。详情可查看官方文档https://learn.microsoft.com/zh-cn/aspnet/core/grpc/protobuf?view=aspnetcore-8.0
3、项目文件csproj中配置proto文件的指向
<ItemGroup>
<Protobuf Include="gRPC\Protos\mydate.proto" GrpcServices="Server" />
</ItemGroup>
4、重新生成服务端项目
5、创建实现类MyDateService 并继承前面所说的服务基类,重写服务实现GetCurrentDatetime
public class MyDateService:MyDate.MyDateBase
{
public override Task<GetCurrentDatetimeReply> GetCurrentDatetime(GetCurrentDatetimeRequest request, ServerCallContext context)
{
return Task.FromResult(new GetCurrentDatetimeReply { Datetime=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")});
}
}
6、项目中集成gRPC,并注册服务
第三步、编写客户端
1、安装依赖的nuget包
<PackageReference Include="Google.Protobuf" Version="3.30.1" />
<PackageReference Include="Grpc.Net.Client" Version="2.70.0" />
<PackageReference Include="Grpc.Net.ClientFactory" Version="2.70.0" />
<PackageReference Include="Grpc.Tools" Version="2.71.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
2、拷贝服务端的服务描述文件至客户端目录下
3、修改客户端服务描述文件,其中修改命名空间为GRPCStudy.AspNet.Client

4、重新生成客户端项目,生成客户端调用类
第四步、客户端项目Progam中集成gRPC,其中的ip和端口号在launchSetting.json中查看


第五步、最后就可以在控制器中通过DI注入客户端调用实例,调用服务了
public class Test : ControllerBase
{
private readonly MyDate.MyDateClient myDateClient;
public Test(MyDate.MyDateClient myDateClient)
{
this.myDateClient = myDateClient;
}
[HttpGet]
public async Task<string> GetCurrentDatetime()
{
var reply=await myDateClient.GetCurrentDatetimeAsync(new GetCurrentDatetimeRequest());
return $"服务器的时间为:{reply.Datetime}";
}
}
最终效果
先启动服务端再启动客户端,然后测试API接口

更多推荐


所有评论(0)