.net core 3.0 gRPC自定义服务

服务器端

新建gRPC项目
在这里插入图片描述
右键Protos文件夹–>新建一个.proto,选择协议缓冲区文件,用于描述gRPC的消息和服务
在这里插入图片描述
名字随便取,这里就叫UpImg
在这里插入图片描述

然后把包名,服务名称,参数和返回值名称都修改一下
在这里插入图片描述
把默认的方法名SayHello和参数与返回值也修改一下
在这里插入图片描述
修改成我们自己定义的参数和返回值
在这里插入图片描述
新建一个UpImgService,实现我们刚刚上面定义的gRPC服务描述UpImg.proto

注意直接实现是找不到新建的服务的
在这里插入图片描述
因为还没有在obj\Debug\netcoreapp3.0下面生成相应的类

需要双击我们项目编辑csproj文件,把新建的UpImg.proto加入到配置中
在这里插入图片描述
加入配置中后保存一下在obj\Debug\netcoreapp3.0中即可生成相应的类
在这里插入图片描述
然后继续实现UpImg.proto,实现很简单注意参数和返回值即可
在这里插入图片描述

客户端

客户端需要添加包:Grpc.Net.Client、Google.Protobuf、Grpc.Tools

  <ItemGroup>
    <PackageReference Include="Google.Protobuf" Version="3.11.2" />
    <PackageReference Include="Grpc.Net.Client" Version="2.26.0" />
    <PackageReference Include="Grpc.Tools" Version="2.26.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
  </ItemGroup>

UpImg.proto复制到客户端中的Proto(这里使用的是直接复制进去)
在这里插入图片描述
同样在客户端加入配置,加入配置和客户端会自动生成相应的代码
在这里插入图片描述

然后调用即可:

public async void UpLoad()
{
    //设置允许不安全的HTTP2支持
    AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
    var channel = GrpcChannel.ForAddress("http://localhost:50001");
    var client = new UpImg.UpImgClient(channel);
    var reply = await client.DoUpLoadAsync(new UpImgRequest { Img = "hello girl" });
    Console.WriteLine(reply.Message);
}

gRPC调用由于目标计算机积极拒绝,无法连接。
修改端口设置,可能是https造成的
在这里插入图片描述

代码:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.ConfigureKestrel(options => {

                options.ListenLocalhost(8099,a=>a.Protocols= Microsoft.AspNetCore.Server.Kestrel.Core.HttpProtocols.Http2);
            });

            webBuilder.UseStartup<Startup>();
        });

还有可能出错Grpc.Core.RpcException:“Status(StatusCode=Unimplemented, Detail="Service is unimplemented.")”
以为你还没有启动你调用的那个服务
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值