欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-10-29 10:23:28
1、使用dotnet new grpc -o GrpcGreeter && cd GrpcGreeter && code . ,进入项目文件中,使用code .使用vscode打开。 [注]你可能会遇到'code' command not found? 解决办法:1)首次使用打开vscode -> ......

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

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

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

  2)cannot create developer certificate on mac

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

  解决办法:我重启了下电脑shutdown -r now,然后运行dotnet dev-certs https --trust,输入验证密码,然后ok了       记录一次Mac VSCode运行Grpc模板项目

  3)无法绑定到 ipv4 环回接口上的 https://localhost:5001:在 macos 上不支持 http/2,因为缺少 alpn 支持。 "。记录一次Mac VSCode运行Grpc模板项目

  解决办法:无法在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="protos\greet.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、运行客户端程序,发现报错

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

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

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

appcontext.setswitch("system.net.http.socketshttphandler.http2unencryptedsupport", true);

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