C#面试题更新 2026-08-05

请阐述在 ASP.NET Core 应用中集成 gRPC 以达成高性能 RPC 通信的具体做法,包括服务定义、客户端与服务器端配置、通信方式以及性能优化策略。

性能优化系统设计技术原理ASP.NET CoregRPC

考察说明

考察候选人对 ASP.NET Core 中 gRPC 集成与性能优化的理解与实践能力。

回答思路

  1. 【回答框架 1】gRPC 是一种基于 HTTP/2 的高性能 RPC 框架,采用 Protocol Buffers 作为接口定义和序列化协议。在 ASP.NET Core 中,通过添加 Grpc.AspNetCore 包,在 Program.cs 中使用 AddGrpc 注册服务,并使用 MapGrpcService 映射具体服务类。客户端通过 Grpc.Net.Client 的 GrpcClient.Create 创建强类型客户端。
  2. 【回答框架 2】定义 .proto 文件,编写 service 定义和 message 类型,通过协议编译器生成 C# 服务基类和客户端类。服务类继承生成的基类并重写 RPC 方法。支持四种通信模式:一元调用、服务器流式、客户端流式和双向流式,可根据业务场景选择。
  3. 【回答框架 3】性能优化主要依靠 HTTP/2 的多路复用、二进制序列化和流式传输。针对高并发场景,应使用非阻塞 I/O,配置 HttpClient 的 SocketsHttpHandler 以支持长连接复用。同时,可启用响应压缩(如 gRPC-Web 场景)和 TLS 加密,但需权衡性能。服务端应设置合理的并发限制和背压机制,避免资源耗尽。
  4. 【回答框架 4】注意维护与处理错误状态,利用 grpc-status 和 grpc-message 传递错误信息。在 ASP.NET Core 中,可集成认证授权,但需区分传输安全与应用安全。测试可使用 Grpc.Testing 等工具进行负载测试,验证吞吐和延迟。
  5. 【关键点 1】gRPC 基于 HTTP/2,支持多路复用和流式通信。
  6. 【关键点 2】使用 .proto 定义接口,生成 C# 服务与客户端。
  7. 【关键点 3】服务端通过 AddGrpc 与 MapGrpcService 注册。
  8. 【关键点 4】客户端使用 GrpcClient.Create 创建。
  9. 【关键点 5】性能优化包括复用连接、启用压缩、合理配置并发。
  10. 【易错点 1】误认为 gRPC 必须使用 TLS,实际可在无 TLS 下运行,但生产环境建议加密。
  11. 【易错点 2】忽略 HTTP/2 对环境的依赖,如部分负载均衡器需特别配置。
  12. 【易错点 3】未考虑不同通信模式对流控制的影响,可能导致死锁或性能下降。