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
解決辦法:一般的解決辦法是直接按照提示運行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="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、運行客戶端程式,發現報錯
於是我們想到可能是我們為瞭解決http2問題引起的,如何解決呢?
解決辦法:允許客戶端進行不安全連接,添加下行代碼
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
7、客戶-服務端正常通信