文章目录
- .Net6 WebAPI 手动开启gRPC服务
- 引用包
- 开启服务
- 配置gRPC通道
- 完整代码
- 总结
- 新建一个Service.cs类,继承自生成的类后,重写处理方法(如果没有生成就先编译一下工程文件)
- 必须重写proto中定义的所有方法
.Net6 WebAPI 手动开启gRPC服务
引用包
开启服务
// Add services to the container.builder.Services.AddGrpc();
配置gRPC通道
// Configure the HTTP request pipeline.app.MapGrpcService<DataReceiver>();
完整代码
public class Program{public static void Main(string[] args){var builder = WebApplication.CreateBuilder(args);// Add services to the container. builder.Services.AddControllers();// Add services to the container.builder.Services.AddGrpc();builder.Services.AddSignalR();// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbucklebuilder.Services.AddEndpointsApiExplorer();builder.Services.AddSwaggerGen();var app = builder.Build();// Configure the HTTP request pipeline.//if (app.Environment.IsDevelopment())//{app.UseSwagger();app.UseSwaggerUI();//}app.UseStaticFiles();app.UseHttpsRedirection();app.UseAuthorization();app.MapControllers();// Configure the HTTP request pipeline.app.MapGrpcService<DataReceiver>();app.Run();}}
以上内容完成以后,按照上一篇文章http://t.csdn.cn/M6nZV进行配置协议和服务类就可以用了。
总结
新建一个Service.cs类,继承自生成的类后,重写处理方法(如果没有生成就先编译一下工程文件)
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){Console.WriteLine($"接收到请求!{request.Name}");return Task.FromResult(new HelloReply{Message = "Hello " + request.Name});}public override Task<Empty> SayBye(Empty request, ServerCallContext context){return base.SayBye(request, context);}}
注意命名空间
必须重写proto中定义的所有方法
在GreeterService 中重写所有定义的方法
否在在客户端调用服务端方法的时候,会出现异常。
再通过对源码查看以后,发现所有的异常都是在自动生成代码中生成的,因为在自动生成的代码中所有的方法都抛出了一个异常,而没有写实现内容。
其实这样做不是一个好的方式,生成的工具可以考虑生成一个抽象类,定义所有方法是抽象方法,这样用户在继承后,IDE就会提示错误,不用等到调用时才知道错了。