記錄一次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="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、客戶-服務端正常通信


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM