官网: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(遥远的/远程)
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 12
netCore3.0需要配合Vs2019或更新的版本
创建时选择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 123456
可能出现的问题:
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
创建一个新的netCore控制台项目GrpcClient
工具-NuGet包管理器-程序包管理器控制台
在控制台内安装以下三个包
Install-Package Grpc.Net.Client Install-Package Google.Protobuf Install-Package Grpc.Tools 123
项目目录下创建
Protos文件夹,里面拖入和服务端一样的greet.proto文件
greet.proto:
修改项目配置文件xxx.csproj:
双击右边资源管理器的项目即可dakai
增加上面的proto文件引用:
<ItemGroup> <Protobuf Include="Protosgreet.proto" GrpcServices="Client" /> </ItemGroup> 123
现在看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(); 12345678
这样写是参照官网的,然后由于上面服务端可能会出现不支持TLS的情况
会报错
Grpc.Core.RpcException:“Status(StatusCode=Internal, Detail="Error starting gRPC call: The SSL connection could not be established, see inner exception.")” 1
不能创建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(); 123456789
将地址改为和服务端一样的,不安全的http地址
同时设置允许不安全的HTTP2支持
最终运行结果:
相关知识
基于C#制作一个桌面宠物
儿童游戏开发教程:宠物清洗与护理C#源码
c#语言实现的桌面宠物资源
C#(asp.net) 宠物领养系统
C# 中的日志记录技术详细解析与示例
基于C#制作一个桌面宠物代码
C#宠物小游戏《scw》的操作与命名教程
C#开源桌宠模拟器:WPF中内置互动虚拟宠物
C#中 ??、 ?、 ?: 、?.、?[ ]
认知训练和认知刺激的区别?
网址: C# netCore Grpc服务 (1)初步认知和HelloWorld https://m.mcbbbk.com/newsview432499.html
上一篇: 蓝天=空气好?真相并非如此 |
下一篇: 宠物家庭什么意思 消除孤独或者娱 |