c# grpc
asp.net 程序安装nuget包: Grpc.AspNetCore, Grpc.AspNetCore.Server.Reflection
修改 program 设置:
<ItemGroup> <Protobuf Include="**/*.proto" OutputDir="Protos" CompileOutputs="false" GrpcServices="Server" /> </ItemGroup>
添加 proto 文件:
syntax="proto3"; option csharp_namespace ="MyProject.Protos"; package MyProject; service MyAuth{ // 登录 rpc Login (LoginRequest) returns (LoginReply); } messageLoginRequest{ string LoginName = 1; string Pwd = 2; } message LoginReply{ int32 Code = 1; string Msg = 2; }
添加服务:
public class MyAuthService : MyAuth.MyAuthBase { public override async Task<LoginReply> Login(LoginRequest req, ServerCallContext context) { return new LoginReply() ; } }
program.cs:
public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(); builder.Services.AddGrpc(); //builder.Services.AddGrpcReflection(); builder.Services.AddRazorPages(); var app = builder.Build(); app.MapGrpcReflectionService().AllowAnonymous(); app.MapGrpcService<HospitalService>(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.MapControllers(); app.MapRazorPages(); app.Run(); } }
客户端配置:
添加nuget引用:Grpc.Net.Client, Grpc.Tools
添加服务期配置的proto文件,在program中设置:
<Protobuf Include="Protos\myauth.proto" GrpcServices="Client" />
调用服务:
private static void GetJWT() { using (var channel = GrpcChannel.ForAddress("https://localhost:443/", new GrpcChannelOptions()//没有正式的证书时,需要配置options { HttpHandler = new HttpClientHandler { ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator } })) { var client = new MyAuth.MyAuthClient(channel); LoginRequest req = new LoginRequest() { LoginName = "", Pwd = "" }; var reply = client.Login(req); Console.WriteLine($"{JsonConvert.SerializeObject(reply)}"); } }

浙公网安备 33010602011771号