C#如何使用gRPC通信 .NET gRPC服务创建与调用方法

.NET中使用gRPC通信需三步:定义一致的.proto协议文件、服务端注册Grpc并实现继承XXXBase的服务类、客户端用GrpcChannel创建强类型客户端调用;注意csharp_namespace匹配、HTTPS配置及.proto生成设置。

c#如何使用grpc通信 .net grpc服务创建与调用方法

在.NET中使用gRPC通信,核心是定义协议(.proto文件)、生成客户端和服务端代码、启动服务并调用。整个流程不复杂但需注意几个关键点:协议必须严格一致、服务需正确注册、客户端需用强类型通道调用。

定义gRPC服务接口(.proto文件)

所有gRPC通信都从一个.proto文件开始。它声明服务方法、请求和响应消息结构,是服务端与客户端的唯一契约。

示例 greet.proto

syntax = "proto3";option csharp_namespace = "MyGrpcService";package greet;service Greeter {  rpc SayHello (HelloRequest) returns (HelloReply);}message HelloRequest {  string name = 1;}message HelloReply {  string message = 1;}

⚠️ 注意:csharp_namespace 必须与项目命名空间匹配;package 影响生成的C#类嵌套路径。

创建.NET gRPC服务端

新建 ASP.NET Core gRPC 项目(或在现有Web项目中添加gRPC支持):

安装 Grpc.AspNetCore NuGet 包 在 Program.cs 中注册服务和中间件:

var builder = WebApplication.CreateBuilder(args);builder.Services.AddGrpc(); // 启用gRPC支持var app = builder.Build();app.MapGrpcService(); // 注册你的服务实现app.MapGet("/", () => "Communication with gRPC endpoints.");

实现服务类 GreeterService.cs

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

✅ 确保继承自 XXXBase(由.proto生成),且方法签名完全匹配。

从客户端调用gRPC服务

客户端可以是控制台、WPF、Blazor WASM(需额外配置)或另一个ASP.NET Core应用。

添加 Grpc.Net.Clientprotobuf 相关包(如 Google.ProtobufGrpc.Tools) 将服务端的 .proto 文件复制到客户端项目(或通过NuGet共享契约库) 设置 .csproj 中的 项以生成客户端代码

调用示例(控制台程序):

using var channel = GrpcChannel.ForAddress("https://localhost:5001");var client = new Greeter.GreeterClient(channel);var reply = await client.SayHelloAsync(new HelloRequest { Name = "Alice" });Console.WriteLine(reply.Message); // 输出:Hello, Alice!

? 提示:开发时推荐用 https + Kestrel(默认启用TLS);若用HTTP明文,需显式配置 AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true) 并改用 http:// 地址。

常见问题与建议

调试gRPC时容易卡在几个地方:

404错误:检查服务是否注册了 MapGrpcService,URL路径是否含 .proto 中定义的服务名 SSL handshake failed:客户端地址用了 http:// 但服务跑在HTTPS上,或证书不受信任(开发可用 channel = GrpcChannel.ForAddress(..., new GrpcChannelOptions { HttpHandler = new HttpClientHandler { ServerCertificateCustomValidationCallback = (a,b,c,d) => true } });找不到类型:确认 .proto 已设为 ,且生成操作为 Compile

基本上就这些。只要.proto一致、服务注册对、通道地址通,调用就能跑起来。

以上就是C#如何使用gRPC通信 .NET gRPC服务创建与调用方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1443098.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 19:43:54
下一篇 2025年12月15日 19:25:20

相关推荐

发表回复

登录后才能评论
关注微信