全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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

在.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一致、服务注册对、通道地址通,调用就能跑起来。


# go  # app  # ssl  # ai  # switch  # google  # 常见问题  # c#  # .net  # c#类  # web项目  # 中间件  # 命名空间  # include  # 继承  # 接口  # channel  # http  # https  # wpf  # wasm  # 客户端  # 服务端  # 几个  # 就能  # 找不到  # 设为  # 用了  # 不受  # 三步  # 卡在 


相关文章: 东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  建站org新手必看:2024最新搭建流程与模板选择技巧  如何撰写建站申请书?关键要点有哪些?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  深圳网站制作的公司有哪些,dido官方网站?  简历在线制作网站免费,免费下载个人简历的网站是哪些?  公司网站的制作公司,企业网站制作基本流程有哪些?  英语简历制作免费网站推荐,如何将简历翻译成英文?  建站之星备案流程有哪些注意事项?  已有域名和空间如何快速搭建网站?  如何在景安云服务器上绑定域名并配置虚拟主机?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  如何在万网开始建站?分步指南解析  如何用景安虚拟主机手机版绑定域名建站?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  建站之星24小时客服电话如何获取?  教学论文网站制作软件有哪些,写论文用什么软件 ?  常州企业网站制作公司,全国继续教育网怎么登录?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  如何选择香港主机高效搭建外贸独立站?  ,怎么在广州志愿者网站注册?  东莞专业制作网站的公司,东莞大学生网的网址是什么?  linux top下的 minerd 木马清除方法  详解jQuery中基本的动画方法  如何快速查询网站的真实建站时间?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  网站专业制作公司有哪些,做一个公司网站要多少钱?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  如何批量查询域名的建站时间记录?  如何选择建站程序?包含哪些必备功能与类型?  教程网站设计制作软件,怎么创建自己的一个网站?  如何快速重置建站主机并恢复默认配置?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  如何在IIS管理器中快速创建并配置网站?  安徽网站建设与外贸建站服务专业定制方案  如何挑选最适合建站的高性能VPS主机?  建站之星CMS五站合一模板配置与SEO优化指南  如何快速生成专业多端适配建站电话?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  如何通过宝塔面板实现本地网站访问?  建站之星图片链接生成指南:自助建站与智能设计教程  如何在IIS中新建站点并配置端口与IP地址?  建站之星2.7模板快速切换与批量管理功能操作指南  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  七夕网站制作视频,七夕大促活动怎么报名?  如何用5美元大硬盘VPS安全高效搭建个人网站?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  C++中引用和指针有什么区别?(代码说明)  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。