一、使用dotnet new grpc -o GrpcGreeter && cd GrpcGreeter && code . ,进入项目文件中,使用code .使用vscode打开。web
[注]你可能会遇到'code' command not found? shell
解决办法:1)首次使用打开vscode -> command+shift+p -> 输入shell -> 提示Shell Command:Install 'code' in PATH -> 点击安装macos
2)额外知识点:mac在命令行中可使用open .打开文件夹安全
二、项目文件打开了,这个时候咱们使用dotnet run运行项目。app
[注]你可能会遇到async
1)https certificate not foundui
解决办法:通常的解决办法是直接按照提示运行dotnet dev-certs https --trust就能够了,可是我遇到了一个很奇葩的事情spa
2)cannot create developer certificate on Mac命令行
解决办法:我重启了下电脑shutdown -r now,而后运行dotnet dev-certs https --trust,输入验证密码,而后ok了 code
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 });
三、建立客户端项目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
四、将服务端的Protos/greet.proto拷贝到客户端Protos/greet.proto下,并在GrpcGreeterClient.csproj项目文件中添加元素项组
<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices="Client" /> </ItemGroup>
五、在客户端程序中
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); } } }
六、运行客户端程序,发现报错
因而咱们想到多是咱们为了解决http2问题引发的,如何解决呢?
解决办法:容许客户端进行不安全链接,添加下行代码
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
七、客户-服务端正常通讯