• 记录一次Mac VSCode运行Grpc模板项目


    1、使用dotnet new grpc -o GrpcGreeter && cd GrpcGreeter && code . ,进入项目文件中,使用code .使用vscode打开。

      [注]你可能会遇到'code' command not found?

      解决办法:1)首次使用打开vscode -> command+shift+p -> 输入shell -> 提示Shell Command:Install 'code' in PATH -> 点击安装

           2)额外知识点:mac在命令行中可以使用open .打开文件夹

    2、项目文件打开了,这个时候我们使用dotnet run运行项目。

      [注]你可能会遇到

      1)https certificate not found

      解决办法:一般的解决办法是直接按照提示运行dotnet dev-certs https --trust就可以了,但是我遇到了一个很奇葩的事情

      2)cannot create developer certificate on Mac

      解决办法:我重启了下电脑shutdown -r now,然后运行dotnet dev-certs https --trust,输入验证密码,然后ok了       

      3)无法绑定到 IPv4 环回接口上的 https://localhost:5001:在 macOS 上不支持 HTTP/2,因为缺少 ALPN 支持。 "。

      解决办法:无法在macOS启动ASP.NET Core gRPC应用

     1 public static IHostBuilder CreateHostBuilder(string[] args) =>
     2   Host.CreateDefaultBuilder(args)
     3    .ConfigureWebHostDefaults(webBuilder =>
     4    {
     5        webBuilder.ConfigureKestrel(options =>
     6        {
     7            options.ListenLocalhost(5000, o => o.Protocols = HttpProtocols.Http2);
     8        });
     9        webBuilder.UseStartup<Startup>();
    10     });

    3、创建客户端项目dotnet new console -o GrpcGreeterClient,并引入以下三个包:

      dotnet add GrpcGreeterClient.csproj package Grpc.Net.Client

      dotnet add GrpcGreeterClient.csproj package Google.Protobuf

      dotnet add GrpcGreeterClient.csproj package Grpc.Tools

    4、将服务端的Protos/greet.proto拷贝到客户端Protos/greet.proto下,并在GrpcGreeterClient.csproj项目文件中添加元素项组

    <ItemGroup>
      <Protobuf Include="Protosgreet.proto" GrpcServices="Client" />
    </ItemGroup>

    5、在客户端程序中

    using System;
    using System.Net.Http;
    using System.Threading.Tasks;
    using GrpcGreeter;
    using Grpc.Net.Client;
    
    namespace GrpcGreeterClient
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                var channel = GrpcChannel.ForAddress("http://localhost:5000");
                var client =  new Greeter.GreeterClient(channel);
                var reply = await client.SayHelloAsync(
                                  new HelloRequest { Name = "GreeterClient" });
                Console.WriteLine("Greeting: " + reply.Message);
            }
        }
    }

    6、运行客户端程序,发现报错

    于是我们想到可能是我们为了解决http2问题引起的,如何解决呢?

      解决办法:允许客户端进行不安全连接,添加下行代码

    AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);

    7、客户-服务端正常通信

  • 相关阅读:
    使用keytool转换签名证书格式,keyStore、jks签名证书相互转换
    Mybatis中jdbcType和javaType的对应关系
    springboot通过已有的server.key,crt,ca证书生成jks文件并开启HTTPS 并启动双向认证+动态加载信任库
    uniapp 生成Android证书及.keystore转.jks、.pem
    查看mysql数据库及表编码格式
    springboot连接mysql报错errorCode 0, state 08S01
    redis注册成windows服务步骤
    lt is detected that the motherboard VT is not enabled, and the games may lag or crash.
    Python %字符串格式化 (%操作符)
    Maven安装教程
  • 原文地址:https://www.cnblogs.com/az4215/p/11961331.html
Copyright © 2020-2023  润新知