asp.net core grpc快速入门

环境

.net 8

vs2022

创建 gRPC 服务器


一定要勾选Https

安装Nuget包

xml 复制代码
<PackageReference Include="Google.Protobuf" Version="3.28.2" />
<PackageReference Include="Grpc.AspNetCore" Version="2.66.0" />
<PackageReference Include="Grpc.Net.Client" Version="2.66.0" />
<PackageReference Include="Grpc.Tools" Version="2.66.0">
	<PrivateAssets>all</PrivateAssets>
	<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

新建Protos文件夹,该文件下新建greet.proto

go 复制代码
syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

添加编译

xml 复制代码
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
</ItemGroup>

新建Service文件夹,该文件夹下新建GreeterService

cs 复制代码
using Grpc.Core;

namespace GrpcServer01.Service
{
    public class GreeterService : Greeter.GreeterBase
    {
        private readonly ILogger<GreeterService> _logger;

        public GreeterService(ILogger<GreeterService> logger)
        {
            _logger = logger;
        }

        public override Task<HelloReply> SayHello(HelloRequest request,
            ServerCallContext context)
        {
            _logger.LogInformation("Saying hello to {Name}", request.Name);
            return Task.FromResult(new HelloReply
            {
                Message = "Hello " + request.Name
            });
        }
    }
}

修改Program.cs

cs 复制代码
using GrpcServer01.Service;

namespace GrpcServer01
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);
            //新增代码在这
            builder.Services.AddGrpc();
            
            var app = builder.Build();
            
            //新增代码在这
            app.MapGrpcService<GreeterService>();
            app.MapGet("/", () => "Hello World!");

            app.Run();
        }
    }
}

启动项目访问https://localhost:7006/

服务端创建成功

创建grpc客户端


安装nuget包

xml 复制代码
<ItemGroup>
	<PackageReference Include="Google.Protobuf" Version="3.28.2" />
	<PackageReference Include="Grpc.Net.Client" Version="2.66.0" />
	<PackageReference Include="Grpc.Tools" Version="2.66.0">
		<PrivateAssets>all</PrivateAssets>
		<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
	</PackageReference>
</ItemGroup>

复制服务端Protos\greet.proto到客户端

xml 复制代码
<ItemGroup>
	<Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
</ItemGroup>

修改Program.cs

cs 复制代码
internal class Program
{
    static async Task Main(string[] args)
    {
        using var channel = GrpcChannel.ForAddress("https://localhost:7006");
        var client = new Greeter.GreeterClient(channel);
        var reply = await client.SayHelloAsync(
                          new HelloRequest { Name = "GreeterClient" });
        Console.WriteLine("Greeting: " + reply.Message);
        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();
    }
}

客户端

服务端

参考

https://grpc.io/docs/languages/csharp/
https://blog.csdn.net/kevin_tech/article/details/120681720
https://learn.microsoft.com/zh-cn/aspnet/core/grpc/?view=aspnetcore-8.0
grpc详解
https://cloud.tencent.com/developer/article/1913513
https://protobuf.dev/overview/

相关推荐
三七互娱后端团队2 小时前
Serena语义检索在AI CodeReview中的应用
后端
Java水解2 小时前
Nginx平滑升级与location配置案例详解
后端·nginx
渣哥2 小时前
从 READ_UNCOMMITTED 到 SERIALIZABLE:Spring 事务隔离级别全解析
javascript·后端·面试
Codelinghu2 小时前
【bug】大模型微调bug:OSError: Failed to load tokenizer.| Lora
后端
Frank_zhou3 小时前
虚拟线程池
后端
aiopencode3 小时前
iOS混淆与IPA加固实战手记,如何构建苹果应用防反编译体系
后端
cxyxiaokui0013 小时前
JDK 动态代理 vs CGLIB:原理、区别与 Spring AOP 底层揭秘
java·后端·spring
00后程序员张3 小时前
Swoole HTTPS 实战,在生产环境部署、性能权衡与排查流程
后端·ios·小程序·https·uni-app·iphone·swoole
我命由我123453 小时前
PDFBox - PDDocument 与 byte 数组、PDF 加密
java·服务器·前端·后端·学习·java-ee·pdf
考虑考虑3 小时前
go格式化时间
后端·go