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应用

 public static IHostBuilder CreateHostBuilder(string[] args) =>
  Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureKestrel(options =>
{
options.ListenLocalhost(, o => o.Protocols = HttpProtocols.Http2);
});
webBuilder.UseStartup<Startup>();
});

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、客户-服务端正常通信

最新文章

  1. 【转】Caffe初试(七)其它常用层及参数
  2. sublime 编译运行C程序
  3. SCOI2005栅栏
  4. Zepto tap 穿透bug
  5. IM架构(一)JSQMessagesViewController
  6. 【Linux】为啥查某个进程的线程,查出来的所有线程的pid不一样啊
  7. C# 文件读取(一)
  8. (菜鸟要飞系列)四,基于Asp.Net MVC5的后台管理系统(zTree绑定Json数据生成树)
  9. 实现在DevExpress.XtraGrid.GridControl的列头绘制复选框以实现全选的功能
  10. JFinal使用笔记1-部署demo项目到本地tomcat
  11. MemoryStream类
  12. java连接sqL2008 数据库实例
  13. CTF---密码学入门第四题 困在栅栏里的凯撒
  14. python/零起点(一、列表)
  15. AndroidVerifyBoot
  16. iOS开发之HTTP与HTTPS网络请求
  17. DevExpress中GridControl的使用笔记(转)
  18. Python&#160;对服务器返回数据编码进行判断之chardet
  19. angular学习笔记(2)- 前端开发环境
  20. 【慕课网实战】Spark Streaming实时流处理项目实战笔记八之铭文升级版

热门文章

  1. 《Java基础知识》Java包的概念
  2. Instrument API介绍
  3. go 利用chan的阻塞机制,实现协程的开始、阻塞、返回控制器
  4. SpringCloud分布式配置中心
  5. C++ lambda expression
  6. 用js写一个鼠标坐标实例
  7. VueCLi3 配置less变量
  8. 使用 Redis 进行阅读数统计并定时持久化
  9. js的动态表格的增删改查思路
  10. OLTP