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/

相关推荐
SFLYQ24 分钟前
Go AICode 工具调研
后端
这里有鱼汤34 分钟前
Python模块化开发,从此告别乱糟糟的代码!
前端·后端·python
这里有鱼汤36 分钟前
高手也容易忽略的 Python 命名空间与作用域
前端·后端·python
捡田螺的小男孩37 分钟前
新来的技术总监,把DDD落地的那叫一个高级优雅!
java·后端
xiezhr1 小时前
程序员为什么总是加班?
前端·后端·程序员
猿java1 小时前
银行系统需要服务降级吗?
java·后端·面试
风象南1 小时前
SpringBoot实现单点登录(SSO)的4种方案
java·spring boot·后端
程序员一诺1 小时前
【Flask开发】嘿马文学web完整flask项目第3篇:2.用户认证,2.用户认证【附代码文档】
后端·python·flask·框架
慕容莞青9 小时前
MATLAB语言的进程管理
开发语言·后端·golang
陈明勇9 小时前
用 Go 语言轻松构建 MCP 客户端与服务器
后端·go·mcp