You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在C#/.NET Core控制台应用中使用Grpc.AspNetCore搭建gRPC服务?

在.NET Core控制台应用中使用Grpc.AspNetCore搭建gRPC服务器

完全可以在.NET Core控制台应用中基于Grpc.AspNetCore实现gRPC服务器,核心思路是在控制台里手动初始化并启动ASP.NET Core主机,将gRPC服务托管在这个主机上。以下是具体实现步骤:

1. 创建项目并安装依赖

  • 创建.NET Core控制台应用:
    dotnet new console -n GrpcConsoleServer
    cd GrpcConsoleServer
    
  • 安装必需的NuGet包:
    dotnet add package Grpc.AspNetCore
    dotnet add package Grpc.AspNetCore.Server.Reflection # 可选,用于gRPC服务反射(方便调试和工具调用)
    

2. 定义gRPC服务(以Greeter服务为例)

在项目中添加Protos/greet.proto文件,内容如下:

syntax = "proto3";

option csharp_namespace = "GrpcConsoleServer";

package greet;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply);
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

修改项目文件(.csproj),确保proto文件被正确处理:

<ItemGroup>
  <Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
</ItemGroup>

3. 实现gRPC服务类

创建Services/GreeterService.cs:

using Grpc.Core;
using GrpcConsoleServer;

namespace GrpcConsoleServer.Services;

public class GreeterService : Greeter.GreeterBase
{
    public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
    {
        return Task.FromResult(new HelloReply
        {
            Message = $"Hello {request.Name} from console gRPC server!"
        });
    }
}

4. 编写控制台启动代码

修改Program.cs,初始化并启动ASP.NET Core主机:

using GrpcConsoleServer.Services;

var builder = WebApplication.CreateBuilder(args);

// 配置Kestrel监听端口(gRPC默认使用HTTP/2,需确保端口支持)
builder.WebHost.ConfigureKestrel(options =>
{
    options.ListenAnyIP(5001, o => o.Protocols = Microsoft.AspNetCore.Server.Kestrel.Core.HttpProtocols.Http2);
});

// 添加gRPC服务
builder.Services.AddGrpc();
// 可选:添加反射服务,方便grpcurl等工具调试
builder.Services.AddGrpcReflection();

var app = builder.Build();

// 映射gRPC服务端点
app.MapGrpcService<GreeterService>();
// 可选:启用反射服务端点
app.MapGrpcReflectionService();

// 启动主机
await app.RunAsync();

5. 运行与测试

  • 启动控制台服务器:dotnet run
  • 用你已有的gRPC客户端连接http://localhost:5001调用SayHello方法,即可收到服务器响应。

内容的提问来源于stack exchange,提问作者mustafa-naeem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:15:15