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)}");
          }
      }

 

posted @ 2025-09-18 09:45  echo三毛  阅读(10)  评论(0)    收藏  举报