zoukankan      html  css  js  c++  java
  • 记录一次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、客户-服务端正常通信

  • 相关阅读:
    Flex 布局
    前端跨域之jsonp
    vs code 自定义代码片段
    vue中使用axios进行http通信
    Table边框合并
    getElementsBy 系列方法相比querySelector系列的区别
    vue中watch简单使用
    png图标任意赋色
    pc端与移动端适配解决方案之rem
    Express post请求无法解析参数的原因
  • 原文地址:https://www.cnblogs.com/az4215/p/11961331.html
Copyright © 2011-2022 走看看