C# netCore Grpc服务 (1)初步认知和HelloWorld

3 篇文章 0 订阅

1.什么是Grpc:

官网:https://www.grpc.io/
官网描述:gRPC is a modern open source high performance RPC framework that can run in any environment
G:google的意思
RPC:
Remote Procedure Call
远程 过程 调用

IPC:进程间调用
分为两种:LPC(本地)和RPC(遥远的/远程)

2.准备过程:

1.安装netCore和Vs

netCore:
https://dotnet.microsoft.com/download/thank-you/dotnet-sdk-3.0.100-windows-x64-installer
Vs:
https://visualstudio.microsoft.com/zh-hans/vs/whatsnew/
vs2019激活码:

Visual Studio 2019 (VS2019) 企业版 Enterprise       :BF8Y8-GN2QH-T84XB-QVY3B-RC4DF
Visual Studio 2019 (VS2019) 专业版 Professional   :NYWVH-HT4XC-R2WYW-9Y3CM-X4V3Y

netCore3.0需要配合Vs2019或更新的版本

2.创建grpc服务端:

创建时选择grpc项目,会自动创建一个自带模板的服务端
目录如下:
在这里插入图片描述
试运行:
输出

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development

可能出现的问题:

System.IO.IOException:“Failed to bind to address https://localhost:5001.”
异常1:
AggregateException: One or more errors occurred. (HTTP/2 over TLS is not supported on Windows 7 due to missing ALPN support.) (HTTP/2 over TLS is not supported on Windows 7 due to missing ALPN support.)
异常2:
NotSupportedException: HTTP/2 over TLS is not supported on Windows 7 due to missing ALPN support.

原因:不支持TLS
解决办法:
在Program.cs中配置不包含 TLS 的 HTTP/2 终结点
在这里插入图片描述运行结果:
在这里插入图片描述
默认的服务端地址是https://localhost:5001
重新指定后的节点是http://localhost:50001

3.创建grpc客户端

创建一个新的netCore控制台项目GrpcClient

在这里插入图片描述
工具-NuGet包管理器-程序包管理器控制台

在控制台内安装以下三个包

Install-Package Grpc.Net.Client
Install-Package Google.Protobuf
Install-Package Grpc.Tools

项目目录下创建
Protos文件夹,里面拖入和服务端一样的greet.proto文件
在这里插入图片描述
greet.proto:
在这里插入图片描述

修改项目配置文件xxx.csproj:
双击右边资源管理器的项目即可dakai
增加上面的proto文件引用:

  <ItemGroup>
    <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
  </ItemGroup>

现在看proto的内容应该是这样的:
在这里插入图片描述
修改program.cs:
代码如下

		 	var channel = GrpcChannel.ForAddress("https://localhost:5001");
            var client = new Greeter.GreeterClient(channel);
            var reply = await client.SayHelloAsync(new HelloRequest { Name = "GrpcClient" });
            
            Console.WriteLine(reply.Message);
            Console.WriteLine("Greeting: " + reply.Message);
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();

这样写是参照官网的,然后由于上面服务端可能会出现不支持TLS的情况
会报错

Grpc.Core.RpcException:“Status(StatusCode=Internal, Detail="Error starting gRPC call: The SSL connection could not be established, see inner exception.")”

不能创建SSL( 安全套接层)连接
修改如下:

            AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
            var channel = GrpcChannel.ForAddress("http://localhost:50001");
            var client = new Greeter.GreeterClient(channel);
            var reply = await client.SayHelloAsync(new HelloRequest { Name = "GrpcClient" });
            
            Console.WriteLine(reply.Message);
            Console.WriteLine("Greeting: " + reply.Message);
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();

将地址改为和服务端一样的,不安全的http地址
同时设置允许不安全的HTTP2支持

4.HelloWorld

最终运行结果:

在这里插入图片描述在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值